Java中join和yield的作用
来源:互联网 发布:焦大seo视频下载 编辑:程序博客网 时间:2024/06/08 07:02
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处!
1、 A.join,在API中的解释是,堵塞当前线程B,直到A执行完毕并死掉,再执行B。
用一个小例子来说明吧
static class ThreadA extends Thread {@Overridepublic void run() {// TODO Auto-generated method stubsuper.run();for (int i = 0; i < 10; i++) {System.out.println("ThreadA" + i);}}}static class ThreadB extends Thread {ThreadA a;public ThreadB(ThreadA a) {// TODO Auto-generated constructor stubthis.a = a;}@Overridepublic void run() {// TODO Auto-generated method stubsuper.run();System.out.println("ThreadB start");try {a.join();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("ThreadB end");}}public static void main(String[] args) {ThreadA a = new ThreadA();ThreadB b = new ThreadB(a);b.start();a.start();}
执行结果:ThreadB startThreadA0ThreadA1ThreadA2ThreadA3ThreadA4ThreadA5ThreadA6ThreadA7ThreadA8ThreadA9ThreadB end
首先b线程执行,a线程join后,直接执行完a,然后才执行b,证实上述说法。2、A.yield,A让出位置,给B执行,B执行结束A再执行。跟join意思正好相反!
static class ThreadA extends Thread {@Overridepublic void run() {// TODO Auto-generated method stubsuper.run();for (int i = 0; i < 10; i++) {System.out.println("ThreadA " + i);}}}static class ThreadB extends Thread {ThreadA a;public ThreadB(ThreadA a) {// TODO Auto-generated constructor stubthis.a = a;}@Overridepublic void run() {// TODO Auto-generated method stubsuper.run();System.out.println("ThreadB start");try {for (int i = 0; i < 10; i++) {if(i==2){a.yield();}System.out.println("ThreadB " + i);}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("ThreadB end");}}public static void main(String[] args) {ThreadA a = new ThreadA();ThreadB b = new ThreadB(a);b.start();a.start();}
执行结果:ThreadB startThreadA 0ThreadB 0ThreadA 1ThreadB 1ThreadA 2ThreadB 2ThreadB 3ThreadB 4ThreadB 5ThreadB 6ThreadB 7ThreadB 8ThreadB 9ThreadB endThreadA 3ThreadA 4ThreadA 5ThreadA 6ThreadA 7ThreadA 8ThreadA 9
首先B执行,然后A执行;在B的循环中,i=2时,A执行yield;接着B执行完,才轮到A执行。
1 0
- Java中join和yield的作用
- Java中join和yield的作用
- java线程中yield()和join()的区别
- java中join,yield的用法
- java中sleep和join和yield和wait和notify的区别
- Java 线程 | yield() 和 join()
- Java中yield()和join()在线程中的不同
- java中join(),yield(),sleep()以及wait()的区别(转)
- Java线程中yield与join方法的区别
- Java线程中yield与join方法的区别
- Java线程中yield与join方法的区别
- Java线程中yield与join方法的区别
- Java线程中yield与join方法的区别
- Java线程中yield与join方法的区别
- Java线程中yield与join方法的区别
- Java线程中yield与join方法的区别
- Java线程中yield与join方法的区别
- Java中sleep,wait,yield,join的区别
- 派生类的三种访问控制
- C++ Eclipse编程工具配置
- 三角形类的构造函数
- Python challenge_12
- 前向星
- Java中join和yield的作用
- Leetcode_sqrtx
- Shiro权限框架文档
- POJ 2234 Matches Game NIM曲石子游戏
- 2.2 线性链表
- Quaternion.LookRotation
- ubuntu12.04.4下安装python的4个库JPEG、 ZLIB、 FREETYPE2和 LITTLECMS
- [java面试] Java面试之struts1与struts2的区别
- Windows虚拟盘创建和删除