Java中join和yield的作用
本文来自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的作用的更多相关文章
- java中instanceof和getClass()的作用
初学者难免有点混淆java中instanceof和getClass()的作用, 下面就来一一讲解. 父类A: class A { } 子类B: class B extends A { } 构造对象 ...
- Java 中的接口有什么作用?以及接口和其实现类的关系?
Java 中的接口有什么作用? - Ivony的回答 - 知乎 https://www.zhihu.com/question/20111251/answer/16585393 这是一个初学者非常常见的 ...
- Java中join()方法的理解
thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程. 比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B. t.join ...
- Java 中的接口有什么作用?好处?
接口的作用就是把使用接口的人和实现接口的人分开,实现接口的人不必要关心谁去使用,而使用接口的人也不用关心谁实现的接口,由接口将他们联系在一起. 很多JAVA初级程序员对于接口存在的意义很疑惑.不知道接 ...
- java中的Class.forName的作用
Class.forName有什么作用 Class.forName(xxx.xx.xx) 返回的是一个类 首先你要明白在java里面任何class都要装载在虚拟机上才能运行.这句话就是装载类用的(和ne ...
- Java中HashCode()和equals()的作用
引言 我们知道Java中的集合(Collection)大致可以分为两类,一类是List,再有一类是Set. 前者集合内的元素是有序的,元素可以重复:后者元素无序,但元素不可重复. 这里就引出一个问题: ...
- Java中this的功能与作用
粗粒度上来说,Java中关键字this主要有2个功能: 1.表示“当前对象”的引用 (1)作为参数传入 [程序实例1] public class MyObject { public Integer v ...
- java中的byte有什么作用?
byte即字节的意思,是java中的基本类型,用心申明字节型的变量. 通常在读取非文本文件时(如图片,声音,可执行文件)需要用字节数组来保存文件的内容,在下载文件时,也是用byte数组作临时的缓冲器接 ...
- Java多线程中join、yield、sleep方法详解
在Java多线程编程中,Thread类是其中一个核心和关键的角色.因此,对该类中一些基础常用方法的理解和熟练使用是开发多线程代码的基础.本篇主要总结一下Thread中常用的一些静态方法的含义及代码中的 ...
随机推荐
- NodeJS学习笔记 (23)模块机制-module
https://github.com/chyingp/nodejs-learning-guide
- 超链接:a标签
a标签的功能:实现跳转功能 a标签的重要属性:href,target href的值为跳转目标的地址,如果是跳转页面的话,需要这个页面的超链接. target的值有四个:_blank._self._pa ...
- 简单的 centos7&rhel7 系统初始化脚本
#!/bin/bash #描述: 基于RHEL7¢os7的初始化配置 #读取用户输入的ip read -p "输入你当前Linux的IP地址:" LAST #截取网 ...
- python 异步IO
参考链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143208573 ...
- 二、 HBase核心功能模块。
Hadoop 框架包含两个核心组件: HDFS 和 MapReduce 其中 HDFS 是文件存储系统,负责数据存储: MapReduce 是 ...
- Qt中事件分发源码剖析
Qt中事件分发源码剖析 Qt中事件传递顺序: 在一个应该程序中,会进入一个事件循环,接受系统产生的事件,而且进行分发,这些都是在exec中进行的. 以下举例说明: 1)首先看看以下一段演示样例代码: ...
- 多client并发登录
//LoginClient.java package mySocket; import java.io.BufferedReader; import java.io.InputStreamReader ...
- vue12 循环添加重复数据
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- javascript对象如何使用
javascript对象如何使用 一.总结 一句话总结:JavaScript 中的所有事物都是对象:字符串.数值.数组.函数... 因为函数是对象,所以自定义对象的创建中有种方法就是函数 1.js中的 ...
- Centos7 zabbix3.4.6的安装部署 (二)
接着安装zabbix客户端 直接安装在服务器上 监控服务器 ip 192.168.161.25 yum -y install zabbix-agent #通过Yum安装zabbix客户端 接着配置za ...