线程礼让(yield)
- 礼让线程,让当前允许的线程暂停,但不阻塞
- 让线程从运行的状态转换为就绪状态
- 让cpu重新调度,礼让不一定会成功,看cpu心情!
package com.wyh.thread; /** * @program: Thread * @description: 线程礼让 * @author: 魏一鹤 * @createDate: 2022-01-02 20:59 **/ //测试线程礼让 礼让不一定成功 只是让线程回到同一起跑线 public class TesThreadYield { public static void main(String[] args){ //创建线程执行体 ThreadYield threadYield=new ThreadYield(); new Thread(threadYield,"线程A").start(); new Thread(threadYield,"线程B").start(); } } class ThreadYield implements Runnable{ @Override public void run() { System.out.println(Thread.currentThread().getName()+"开始执行"); //线程礼让 Thread.yield(); System.out.println(Thread.currentThread().getName()+"结束执行"); } }
线程强制执行(join)
- join合并线程,待此线程执行完成后,再开始执行其他线程,在此期间其他线程只能阻塞等待
- 可以把他想象成插队
- 需要被捕获异常InterruptedException
package com.wyh.thread; /** * @program: Thread * @description: 线程join强制插队 * @author: 魏一鹤 * @createDate: 2022-01-03 21:27 **/ //线程join测试 可以把它想象成插队 public class TestThreadJoin implements Runnable{ @Override public void run() { for (int i = 0; i < 1000; i++) { System.out.println("vip来了"+i); } } public static void main(String[] args) throws InterruptedException { //启动线程 TestThreadJoin testThreadJoin = new TestThreadJoin(); Thread thread = new Thread(testThreadJoin); thread.start(); for (int i = 0; i < 500; i++) { //如果i==500 让run线程插队执行,main方法阻塞等待,等run方法执行完之后再执行 if(i==200){ thread.join(); } System.out.println("main启动线程"+i); } } }