让当前正在执行的线程暂停,但不阻塞;
将线程运行状态转为就绪状态;礼让不一定成功,得看CPU的心情; Thread.yield();——使用的方法
package Stop;
?
public class TeastYied {
public static void main(String[] args) {
MyYied my=new MyYied();
new Thread(my,"第一条").start();
new Thread(my,"第二条").start();
}
?
}
class MyYied implements Runnable{
线程的强制执行 join
Join合并线程,待此线程执行完了在执行其他线程,其他线程阻塞;(插队,老VIP了) join
package Stop;
?
public class TestJoin implements Runnable {
线程的状态:
new->就绪状态->运行状态(可能会阻塞,阻塞之后就绪状态)->死亡状态
一旦死亡就不可以再次启动;
线程的优先级:
通过getPriority().setPriority(int ..); 可以改变或者获取优先级;
先设置优先级在启动;
package Stop;
?
public class TestPriority {
?
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName()+Thread.currentThread().getPriority());
myPriority my=new myPriority();
Thread m1=new Thread(my);
Thread m2=new Thread(my);
Thread m3=new Thread(my);
Thread m4=new Thread(my);
m1.setPriority(2);
m1.start();
m2.setPriority(Thread.MAX_PRIORITY); //10
m2.start();
m3.setPriority(5);
m3.start();
m4.setPriority(3);
m4.start();
?
}
}
class myPriority implements Runnable{
main的优先级是5;最高为10;默认为5;
守护(daemon)线程
线程分为用户线程和守护线程;
虚拟机必须确保用户线程执行完毕;-不用等守护线程结束;
默认的Daemon为false,即用户线程,需要自己设置为守护线程(true);
package Stop;
?
public class TestDeomen {
public static void main(String[] args) {
god g1=new god();
Thread g2=new Thread(g1);
g2.setDaemon(true);
g2.start();
user u1=new user();
Thread u2=new Thread(u1);
u2.start();
?
}
?
}
class god implements Runnable{
线程的同步机制
多个线程操作同一个资源;
并发:同一个对象被多个线程同时操作;
当多个对象想修改这个对象的时候,就需要线程同步,即一种等待机制,多个对象进入对象的等待池
形成队列;
形成条件:队列+锁 ---保证线程的安全
锁机制synchronized,独占资源;
线程同步会影响性能问题(效率)但是安全;