本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处!

1、   A.join,在API中的解释是,堵塞当前线程B,直到A执行完毕并死掉,再执行B。

用一个小例子来说明吧

static class ThreadA extends Thread {
@Override
public void run() {
// TODO Auto-generated method stub
super.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 stub
this.a = a;
} @Override
public void run() {
// TODO Auto-generated method stub
super.run();
System.out.println("ThreadB start");
try {
a.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.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 start
ThreadA0
ThreadA1
ThreadA2
ThreadA3
ThreadA4
ThreadA5
ThreadA6
ThreadA7
ThreadA8
ThreadA9
ThreadB end

首先b线程执行,a线程join后,直接执行完a,然后才执行b,证实上述说法。

2、A.yield,A让出位置,给B执行,B执行结束A再执行。跟join意思正好相反!

	static class ThreadA extends Thread {
@Override
public void run() {
// TODO Auto-generated method stub
super.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 stub
this.a = a;
} @Override
public void run() {
// TODO Auto-generated method stub
super.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 block
e.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 start
ThreadA 0
ThreadB 0
ThreadA 1
ThreadB 1
ThreadA 2
ThreadB 2
ThreadB 3
ThreadB 4
ThreadB 5
ThreadB 6
ThreadB 7
ThreadB 8
ThreadB 9
ThreadB end
ThreadA 3
ThreadA 4
ThreadA 5
ThreadA 6
ThreadA 7
ThreadA 8
ThreadA 9

首先B执行,然后A执行;在B的循环中,i=2时,A执行yield;接着B执行完,才轮到A执行。

Java中join和yield的作用的更多相关文章

  1. java中instanceof和getClass()的作用

    初学者难免有点混淆java中instanceof和getClass()的作用,  下面就来一一讲解. 父类A: class A { } 子类B: class B extends A { }  构造对象 ...

  2. Java 中的接口有什么作用?以及接口和其实现类的关系?

    Java 中的接口有什么作用? - Ivony的回答 - 知乎 https://www.zhihu.com/question/20111251/answer/16585393 这是一个初学者非常常见的 ...

  3. Java中join()方法的理解

    thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程. 比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B. t.join ...

  4. Java 中的接口有什么作用?好处?

    接口的作用就是把使用接口的人和实现接口的人分开,实现接口的人不必要关心谁去使用,而使用接口的人也不用关心谁实现的接口,由接口将他们联系在一起. 很多JAVA初级程序员对于接口存在的意义很疑惑.不知道接 ...

  5. java中的Class.forName的作用

    Class.forName有什么作用 Class.forName(xxx.xx.xx) 返回的是一个类 首先你要明白在java里面任何class都要装载在虚拟机上才能运行.这句话就是装载类用的(和ne ...

  6. Java中HashCode()和equals()的作用

    引言 我们知道Java中的集合(Collection)大致可以分为两类,一类是List,再有一类是Set. 前者集合内的元素是有序的,元素可以重复:后者元素无序,但元素不可重复. 这里就引出一个问题: ...

  7. Java中this的功能与作用

    粗粒度上来说,Java中关键字this主要有2个功能: 1.表示“当前对象”的引用 (1)作为参数传入 [程序实例1] public class MyObject { public Integer v ...

  8. java中的byte有什么作用?

    byte即字节的意思,是java中的基本类型,用心申明字节型的变量. 通常在读取非文本文件时(如图片,声音,可执行文件)需要用字节数组来保存文件的内容,在下载文件时,也是用byte数组作临时的缓冲器接 ...

  9. Java多线程中join、yield、sleep方法详解

    在Java多线程编程中,Thread类是其中一个核心和关键的角色.因此,对该类中一些基础常用方法的理解和熟练使用是开发多线程代码的基础.本篇主要总结一下Thread中常用的一些静态方法的含义及代码中的 ...

随机推荐

  1. keytool常用操作

    keytool 秘钥需要存储在秘钥库中,秘钥库可以理解为一个存储了一个或多个秘钥的文件.一个秘钥库可以存储多个密钥对,每个秘钥对你都需要给他们取一个名字. D:\software\Java\jdk1. ...

  2. PostgreSQL创建只读用户

    创建用户及指定密码: CREATE USER readonly WITH ENCRYPTED PASSWORD 'ropass'; 设置用户默认事务只读: alter user readonly se ...

  3. 【Henu ACM Round#20 C】 Eevee

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 处理处所有的字符串可能的样子. 存在map里面就好. [代码] #include <bits/stdc++.h> usi ...

  4. POJ 3869 Headshot

    Headshot Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID: 3 ...

  5. hihoCoder #1127 : 二分图二·二分图最小点覆盖和最大独立集

    #1127 : 二分图二·二分图最小点覆盖和最大独立集 Time Limit:10000ms Case Time Limit:1000ms Memory Limit:256MB 描述 在上次安排完相亲 ...

  6. poj2031-Building a Space Station(最小生成树,kruskal,prime)

    Building a Space Station Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 5874   Accepte ...

  7. ruby redis的集群管理器

    #========================================================================================== # => ...

  8. 怎样查看电脑的IP地址

    在DOW窗体 :cmd->ipconfig 见截图:

  9. usb芯片调试经验

    记录一下调试usb有关的芯片的一些经验. 1.有i2c的芯片.一般有i2c的地址选择. 检查地址选择是否正确,地址是多少.SCL和SDA上面是否有上拉电阻. 芯片的地址是几位的.I2c的时钟频率也是必 ...

  10. 三段式状态机 [CPLD/FPGA]

    状态机的组成其实比较简单,要素大致有三个:输入,输出,还有状态. 状态机描述时关键是要描述清楚前面提高的几个状态机的要素,即如何进行状态转移:每个状态的输出是什么:状态转移是否和输入条件相关等. 有人 ...