用代码解析Java线程状态变换过程
小编这次要用代码解析Java线程状态变换过程,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。
创新互联公司主营开阳网站建设的网络公司,主营网站建设方案,app开发定制,开阳h5小程序开发搭建,开阳网站营销推广欢迎开阳等地区企业咨询
线程状态
- NEW:刚创建未启动的线程
- RUNNABLE:正在执行状态
- BLOCKED:处于阻塞状态的线程
- WAITING:正在等待另一个线程执行特定动作的线程
- TIMED_WAITING:等待另一个线程执行时间到达指定时间
- TERMINATED:线程退出执行
public class TestState { public static void main(String[] args) { Thread thread = new Thread(()->{ for (int i = 0; i < 5; i++) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("/////"); }); //观察线程状态 Thread.State state = thread.getState(); System.out.println(state); //New状态 thread.start(); state = thread.getState(); System.out.println(state);//Run状态 while (state!=Thread.State.TERMINATED){ try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } state = thread.getState();//更新线程状态 System.out.println(state);//输出状态 } } }
线程礼让
- 当前正在执行的线程暂停,但是不会阻塞
- 当前线程失去处理机,编程就绪状态
- 礼让是否成功取决于CPU,如果礼让成功,则等待下一次调度
public class TestYield { public static void main(String[] args) { MyYield myYield = new MyYield(); new Thread(myYield,"a").start(); new Thread(myYield,"b").start(); } } class MyYield implements Runnable{ @Override public void run() { System.out.println(Thread.currentThread().getName()+"线程开始执行"); Thread.yield(); System.out.println(Thread.currentThread().getName()+"线程停止执行"); } }
执行结果:
线程强制执行到结束
- 使用join()方法
- 使用join()方法的线程会强制执行直到结束,不会让出处理机
public class TestJoin implements Runnable{ @Override public void run() { for (int i = 0; i < 1000; i++) { System.out.println("强制执行线程来了"+i); } } public static void main(String[] args) throws Exception{ TestJoin testJoin = new TestJoin(); Thread thread = new Thread(testJoin); thread.start(); for (int i = 0; i < 500; i++) { if(i==200){ thread.join(); } System.out.println("主线程"+i); } } }
看完这篇关于用代码解析Java线程状态变换过程的文章,如果觉得文章内容写得不错的话,可以把它分享出去给更多人看到。
分享文章:用代码解析Java线程状态变换过程
转载来于:http://hbruida.cn/article/jihioc.html