yield,sleep,join方法的使用
来源:互联网 发布:重庆象宿网络 编辑:程序博客网 时间:2024/06/06 16:33
一.yield:Thread类中的静态方法
该方法用于使当前线程主动让出当次CPU时间片回到Runnable状态,等待分配时间片。注意当前线程使用yield之后仍有可能立即又获得时间片,从Runnable态进入Running态
详细的线程状态转换图参见点击打开链接
该方法用于使当前线程主动让出当次CPU时间片回到Runnable状态,等待分配时间片。注意当前线程使用yield之后仍有可能立即又获得时间片,从Runnable态进入Running态
package com.zc;public class Z01Yield {public static void main(String[] args) {new Thread("线程1"){public void run() {for(int i=0;i<100;i++){System.out.println(Thread.currentThread().getName()+":i="+i);if(i==20){Thread.yield();}}};}.start();new Thread("线程2"){public void run() {for(int i=0;i<100;i++){System.out.println(Thread.currentThread().getName()+":i="+i);}};}.start();}}
以上代码当线程1中i循环到20时,调用Thread.yield(),让出时间片,但是输出结果并不是很明显,因为线程1调用Thread.yield()之后并不能保证线程2能抢占到cpu时间片。
二、join:该方法用于等待当前线程结束。此方法是一个阻塞方法。
该方法声明抛出InterruptException。
package com.zc;public class Z02Join {public static void main(String[] args) {final Thread t2=new Thread("线程2"){public void run() {for(int i=0;i<100;i++){System.out.println(Thread.currentThread().getName()+":i="+i);}};};t2.start();new Thread("线程1"){public void run() {for(int i=0;i<100;i++){System.out.println(Thread.currentThread().getName()+":i="+i);if(i==20){try {t2.join();//调用t2.join();则当前线程会等待t2线程执行完毕再继续执行} catch (InterruptedException e) {e.printStackTrace();}}}};}.start();}}在线程1中调用t2.join(),则当前线程会进入阻塞态,直到t2线程执行完毕,当前线程才会继续执行。
三、sleep:
Thread的静态方法sleep用于使当前线程进入阻塞状态:
static void sleep(long ms)
该方法会使当前线程进入阻塞状态指定毫秒,当指定毫秒阻塞后,当前线程会重新进入Runnable状态,等待分配时间片。
该方法声明抛出一个InterruptException。所以在使用该方法时需要捕获这个异常。
package com.zc;public class Z03Sleep {public static void main(String[] args) {final Thread t2=new Thread("线程1"){public void run() {for(int i=0;i<100;i++){try {Thread.sleep(1000);//sleep一秒} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+":i="+i);}};};t2.start();}}该线程会每隔1秒输出一次
详细的线程状态转换图参见点击打开链接
0 0
- yield,sleep,join方法的使用
- Sleep/join/yield方法
- 线程的sleep,join,yield方法
- sleep(),wait(),yield(),join()方法的区别
- 类Thread的三种方法:sleep(),join(),yield()
- sleep(),wait(),yield()和join()方法的区别
- 线程sleep,wait,join,yield方法的区别
- java线程的sleep、yield、wait、join方法
- sleep(),wait(),yield()和join()方法的区别
- 线程:sleep()、wait()、yield()和join()方法
- sleep()、wait()、yield()、join()方法 解析
- sleep()、wait()、yield()、join()方法 解析
- JAVA中sleep()、wait()、yield()、join()方法
- sleep()、wait()、yield()、join()方法 解析
- 线程sleep()、wait()、yield()、join()方法 解析
- sleep()、wait()、yield()、join()方法 解析
- 线程中的start、join、sleep、yield方法
- sleep()、wait()、yield()、join()方法 解析
- sdoi2009 [动态规划 状态压缩DP] 学校食堂
- upper_bound 和lower_bound 的返回值问题
- Memcache实现搜索关键字
- 树的Hash方法?
- Java中的23种设计模式与7大原则
- yield,sleep,join方法的使用
- Java 获取客户端IP地址
- Effective C++阅读笔记(三):类的实现
- 约瑟夫问题汇总
- 高仿“点触验证码”做的一个静态Html例子
- CodeForces 731C. Socks(DFS)
- [ElasticSearch]分布式文档存储(Distributed Document Store)
- 判断一个类是否继承于指定类或是否实现了指定接口
- PAT乙级1019