手机网站指向什么意思,s网站建设,深圳网站设计推荐刻,plone cms Wordpress多线程
5 线程状态
5.3 线程礼让
Thread.yield()礼让线程#xff0c;让当前正在执行的线程暂停#xff0c;但不阻塞将线程从运行状态转为就绪状态让CPU重新调度#xff0c;礼让不一定成功#xff01;由CPU调度决定。
package com.duo.state;//测试礼让线程
public clas…多线程
5 线程状态
5.3 线程礼让
Thread.yield()礼让线程让当前正在执行的线程暂停但不阻塞将线程从运行状态转为就绪状态让CPU重新调度礼让不一定成功由CPU调度决定。
package com.duo.state;//测试礼让线程
public class YieldTest {public static void main(String[] args) {MyYield myYield new MyYield();new Thread(myYield, a).start();new Thread(myYield, b).start();}
}class MyYield implements Runnable {Overridepublic void run() {System.out.println(Thread.currentThread().getName() 线程开始执行);Thread.yield(); //线程礼让System.out.println(Thread.currentThread().getName() 线程停止执行);}
}运行结果 如上所示原本a线程应当会相继输出a线程开始执行和a线程停止执行由于线程礼让在执行完System.out.println(Thread.currentThread().getName() 线程开始执行);之后a线程礼让b线程开启同理在b线程执行完相同语句时b线程礼让a线程继续执行。
当注释掉Thread.yield();之后运行结果 但实际上每次的运行结果是不同的主要还是“看CPU心情”例如同样是未加礼让就出现了如下所示的运行结果 5.4 线程强制执行
Join合并线程待此线程执行完成之后再执行其他线程其他线程阻塞可以类比插队
package com.duo.state;//测试join方法
public class JoinTest 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 {JoinTest joinTest new JoinTest();Thread thread new Thread(joinTest);thread.start();//主线程for (int i 0; i 500; i) {if (i 200) {thread.join();}System.out.println(main i);}}
}运行结果(部分截取) 可以发现主线程中只有当i在达到200之后才会接着之前“插队”的VIP线程继续执行。