多线程 -- yield()方法和sleep()方法的区别
来源:互联网 发布:php ruby perl python 编辑:程序博客网 时间:2024/06/06 04:26
yiled()方法,指线程1让步后,它把机会让给了同等优先级的线程,由操作系统选择接下来要执行的线程,可能是线程1,也可能是其他线程。线程1的状态转换如下:
Runnng --> Runable(就绪状态)
sleep(),指让线程1休息给定的时间。只要休息的时间够长,且有其他线程已经处于就绪状态,那么接下来要执行的线程肯定不会是线程1。线程1的状态转换如下:
Running --> Blocked(阻塞状态) --> Runnable(就绪状态)
一.执行yiled()方法
public class Two_Thread implements Runnable {public static void main(String[] args) {// TODO Auto-generated method stubTwo_Thread R = new Two_Thread();for(int i=0;i<3;i++){Thread t1 = new Thread(R);t1.start(); //通过start()方法启动线程}//System.out.println(Thread.currentThread().getName()+" back to main");}@Overridepublic void run() {// TODO Auto-generated method stubincreate();}private void increate() { // TODO Auto-generated method stubfor(int i=0;i<5;i++){System.out.println(Thread.currentThread().getName()+" i = "+i); Thread.yield(); }}}
打印出来的其中一种log:
Thread-0 i = 0
Thread-2 i = 0
Thread-1 i = 0
Thread-2 i = 1
Thread-0 i = 1
Thread-2 i = 2
Thread-1 i = 1
Thread-2 i = 3
Thread-0 i = 2
Thread-2 i = 4
Thread-1 i = 2
Thread-1 i = 3
Thread-1 i = 4
Thread-0 i = 3
Thread-0 i = 4
由log我们可以看出,运行了线程Thread-1( 即打印i=2),然后让步,接下来还是运行线程Thread-1 (即打印i=3)。
Thread-1 i = 2
Thread-1 i = 3
Thread-1 i = 4
二.执行sleep()方法
public class Two_Thread implements Runnable {public static void main(String[] args) {// TODO Auto-generated method stubTwo_Thread R = new Two_Thread();for(int i=0;i<3;i++){Thread t1 = new Thread(R);t1.start(); //通过start()方法启动线程}//System.out.println(Thread.currentThread().getName()+" back to main");}@Overridepublic void run() {// TODO Auto-generated method stubincreate();}private void increate() { // TODO Auto-generated method stubfor(int i=0;i<5;i++){System.out.println(Thread.currentThread().getName()+" i = "+i); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}}
打印出来的log是: 其中i的值肯定是 000 111 222 333 444
Thread-0 i = 0
Thread-1 i = 0
Thread-2 i = 0
Thread-0 i = 1
Thread-1 i = 1
Thread-2 i = 1
Thread-0 i = 2
Thread-1 i = 2
Thread-2 i = 2
Thread-0 i = 3
Thread-2 i = 3
Thread-1 i = 3
Thread-0 i = 4
Thread-2 i = 4
Thread-1 i = 4
由log我们可以看出,运行了线程Thread-1,只要休眠时间够长且有其他线程就绪,接下来肯定不会再运行线程Thread-1
- 多线程 -- yield()方法和sleep()方法的区别
- Java 多线程学习 sleep()和yield()方法的区别
- sleep()方法和yield()方法的区别
- sleep和yield方法的区别
- sleep() 和 yield()方法的区别
- sleep()和yield()方法的区别
- 线程的sleep()方法和yield()方法的区别
- 线程的sleep()方法和yield()方法有什么区别?
- 线程的sleep()方法和yield()方法有什么区别?
- Java多线程之sleep 和yield方法
- sleep()和yield()方法
- Daemon线程 及sleep和yield方法的区别
- sleep(),wait(),yield()和join()方法的区别
- sleep(),wait(),yield()和join()方法的区别
- sleep(),wait(),yield(),join()方法的区别
- Java 线程的sleep和yield方法
- JAVA多线程之——wait/yield/sleep/join方法的区别
- Java之sleep()方法与yield()方法的区别
- C#中的流(一)
- ORA-12520: TNS:listener could not find available handler
- git 下 分支创建 合并 删除 相关操作
- Objective-C继承
- 成绩排名
- 多线程 -- yield()方法和sleep()方法的区别
- 【学习笔记】JavaScript编码规范-类型
- 成绩管理系统
- 异常处理 Can't create handler inside thread that has not called Looper.prepare()
- SharePoint 2016 的新特性概览(一)(What's New for IT Professionals in SharePoint Server 2016)
- Android自定义View--验证码控件
- 陈怡暖:非农前或窄幅震荡走势
- Markdown 语法(0)- 序言
- C++中数字与字符串之间的转换