java 多线程join,合并线程
来源:互联网 发布:如何投诉淘宝 编辑:程序博客网 时间:2024/06/10 17:20
[seriesposts sid=500]
线程的join合并的含义就是将几个并行线程的线程合并为一个单线程执行,应用场景是当一个线程必须等待另一个线程执行完毕才能执行时可以使用join方法。
主线程等待1000ms,进行合并,跳回主线程,然后执行子线程
如果将
改为
主线程等待2000ms,进行合并。
结果
主线程等2000,开始join。 跳回主线程,发现子线程都执行完毕了。
如果改成
JDK这样说的 A timeout of 0 means to wait forever 字面意思是永远等待.
结果
其实Join方法实现是通过wait。 当main线程调用t.join时候,main线程会获得线程对象t的锁(wait 意味着拿到该对象的锁),调用该对象的wait(等待时间),直到该对象唤醒main线程,比如退出后。
所以上面的t.join(0) 等到子线程退出以后,跳回主线程。
main 线程调用t.join时,必须能够拿到线程t对象的锁,如果拿不到它是无法wait的,刚开的例子t.join(1000)不是说明了main线程等待1秒,如果在它等待之前,其他线程获取了t对象的锁,它等待时间可不就是1秒了
一个线程获取了锁,主线在join的时候,即使被join的线程结束了,因为线程被锁住,所以即使join的时间也到了,但是还是必须等待锁释放,才能被join
首发于http://java-er.com -http://java-er.com/blog/java-thread-join/
看了不后悔,学习编程的八个建议
你会遇到的30个JAVA面试题
俄罗斯方块设计原理
Android教程二:Android 工程文件说明大全
java高性能编程的26个注意事项
一位外国网赚达人的五个写博客建议
线程的join合并的含义就是将几个并行线程的线程合并为一个单线程执行,应用场景是当一个线程必须等待另一个线程执行完毕才能执行时可以使用join方法。
package com.javaer.thread;public class Tjoin {/** * @param args */public static void main(String[] args) {Thread t = new Thread(new Runner()); t.start(); try { t.join(1000); System.out.println("join ok"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); }}}class Runner implements Runnable { @Override public void run() { try { System.out.println("Start sleep"); Thread.sleep(1000); System.out.println("End sleep"); } catch (InterruptedException e) { e.printStackTrace(); } }}
Start sleepjoin okEnd sleep
主线程等待1000ms,进行合并,跳回主线程,然后执行子线程
如果将
t.join(1000);
改为
t.join(2000);
主线程等待2000ms,进行合并。
结果
Start sleepEnd sleepjoin ok
主线程等2000,开始join。 跳回主线程,发现子线程都执行完毕了。
如果改成
t.join(0)
JDK这样说的 A timeout of 0 means to wait forever 字面意思是永远等待.
结果
Start sleepEnd sleepjoin ok
其实Join方法实现是通过wait。 当main线程调用t.join时候,main线程会获得线程对象t的锁(wait 意味着拿到该对象的锁),调用该对象的wait(等待时间),直到该对象唤醒main线程,比如退出后。
所以上面的t.join(0) 等到子线程退出以后,跳回主线程。
main 线程调用t.join时,必须能够拿到线程t对象的锁,如果拿不到它是无法wait的,刚开的例子t.join(1000)不是说明了main线程等待1秒,如果在它等待之前,其他线程获取了t对象的锁,它等待时间可不就是1秒了
package com.javaer.thread;public class Tjoin {/** * @param args */public static void main(String[] args) {Thread t = new Thread(new Runner());new Threader(t).start();t.start();try {t.join(1000);System.out.println("join ok");} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}class Threader extends Thread {Thread thread;public Threader(Thread thread) {this.thread = thread;}@Overridepublic void run() {holdThreadLock();}public void holdThreadLock() {synchronized (thread) {System.out.println("获取一个锁");try {Thread.sleep(9000);} catch (InterruptedException ex) {ex.printStackTrace();}System.out.println("释放锁");}}}class Runner implements Runnable {@Overridepublic void run() {try {System.out.println("Start sleep");Thread.sleep(2000);System.out.println("End sleep");} catch (InterruptedException e) {e.printStackTrace();}}}
获取一个锁Start sleepEnd sleep释放锁join ok
一个线程获取了锁,主线在join的时候,即使被join的线程结束了,因为线程被锁住,所以即使join的时间也到了,但是还是必须等待锁释放,才能被join
首发于http://java-er.com -http://java-er.com/blog/java-thread-join/
看了不后悔,学习编程的八个建议
你会遇到的30个JAVA面试题
俄罗斯方块设计原理
Android教程二:Android 工程文件说明大全
java高性能编程的26个注意事项
一位外国网赚达人的五个写博客建议
0 0
- java 多线程join,合并线程
- java 线程合并(join)
- Java【多线程知识总结(3)】调用join()合并线程
- Java多线程:线程调度Join
- Java多线程-线程状态、sleep()、yield()、join()
- Java多线程____线程状态Join()方法
- Java多线程-线程的调度(合并)
- java多线程:线程的调度-合并
- Java多线程 -- 线程的调度-合并
- 5.3 Join方法合并线程
- Java多线程-(5)线程的优先级、sleep()、yield()、join()
- Java线程join()方法的用处,多线程同步
- JAVA多线程-线程间通信(四)-join的使用
- Java多线程编程----线程间通信--join()方法详解
- Java-----多线程小知识点:join()方法和守护线程
- java多线程学习之使用join()方法实现线程插队
- Java线程join()方法的用处,多线程同步
- Java多线程(四):线程中断、线程让步、线程睡眠、线程合并
- 前端 CSS 规范
- Final的用法之一 Java
- Linux script命令来记录你所有终端命令操作
- Spring - 资源文件properties的配置
- 在vusal studio 2008中编译c语言
- java 多线程join,合并线程
- 帝国CMS
- destroy-method="close"的作用
- html中同时添加多个滚动图片区域出现问题
- Robbins-Monro 随机逼近算法和序列学习(Sequential Learning)
- Compiler_编译原理复习小注
- 为什么每个前端开发者都要理解网页渲染?[转]
- ios硬编码支持的音频格式
- 【VC6.0】文件操作,读取PE文件