本文主要是介绍Java多线程详解(三)线程状态 3、线程礼让(yield)与线程强制执行(join),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Java多线程详解(三)线程状态
(1)线程状态的简要说明
(2)线程状态转换过程中常用的方法
(3)停止线程
(4)线程休眠
(5)线程礼让(yield)
- 礼让线程,让当前正在执行的线程暂停,但不阻塞
- 将线程从运行状态转为就绪状态
- 让CPU重新调度,即重新加入就绪队列,礼让不一定成功,看CPU的调度策略
public class TestYield {public static void main(String[] args) {MyYield myYield = new MyYield();Thread thread1,thread2,thread3;thread1 = new Thread(myYield,"thread1");thread2 = new Thread(myYield,"thread2");thread3 = new Thread(myYield,"thread3");thread1.start();thread2.start();thread3.start();}}class MyYield implements Runnable{@Overridepublic void run() {System.out.println(Thread.currentThread().getName()+"线程开始执行");Thread.yield();//线程礼让System.out.println(Thread.currentThread().getName()+"线程停止执行");}
}
结果为:
(6)线程强制执行(join)
- join合并线程,待此线程执行完成后,再执行其他线程,其他线程阻塞(可以想象成插队)
public class TestJoin implements Runnable{@Overridepublic void run() {for (int i = 0; i < 1000; i++) {System.out.println("线程vip来了"+i);}}public static void main(String[] args) throws InterruptedException {//启动自己的线程TestJoin testJoin = new TestJoin();Thread thread = new Thread(testJoin);thread.start();//启动主线程for (int i = 0; i < 1000; i++) {if (i == 200){thread.join();//开始插队}System.out.println("main"+i);}}
}
结果如下:
可以发现,当主线程到达第200次循环时,VIP线程插队,从此之后,只有等VIP线程结束过后,主线程才能继续执行。
这篇关于Java多线程详解(三)线程状态 3、线程礼让(yield)与线程强制执行(join)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!