Java 多线程 join和interrupt 方法
2014-12-15 00:07
441 查看
简述:
使用Java多线程中join和interrupt函数
《Java编程思想》 P669 ~ P670
一个线程可以再其他线程上调用join()方法,其效果是等待一段时间直到第二个线程结束才继续执行。
如果某个线程在另一个线程t上调用t.join(), 此线程将被挂起, 直到目标线程t结束才恢复(即t.isAlive() 返回为假)
对join()方法的调用可以被中断, 做法是在调用线程上调用interrupt()方法,这时需要用到 try-catch
Sleeper.java
Joiner.java
Test1.java
可以看到在第一条线程休眠1500毫秒之后,join-A的线程才完成
Test.java
输出:
由于对sleeper线程使用了interrupt,sleeper没有完成之前,就已经中断了join()
使用Java多线程中join和interrupt函数
《Java编程思想》 P669 ~ P670
一个线程可以再其他线程上调用join()方法,其效果是等待一段时间直到第二个线程结束才继续执行。
如果某个线程在另一个线程t上调用t.join(), 此线程将被挂起, 直到目标线程t结束才恢复(即t.isAlive() 返回为假)
对join()方法的调用可以被中断, 做法是在调用线程上调用interrupt()方法,这时需要用到 try-catch
Sleeper.java
package com.anialy.test.multithread.JoinAndInterrupt; public class Sleeper extends Thread { private int duration; public Sleeper(String name, int sleepTime){ setName(name); this.duration = sleepTime; start(); // 在构造函数中启动 } @Override public void run() { try{ sleep(duration); } catch(InterruptedException e){ System.out.println(String.format("%s was interrupted. isInterrupted(): %b" , getName(), isInterrupted())); return; } System.out.println(getName() + " has awakened"); } }
Joiner.java
package com.anialy.test.multithread.JoinAndInterrupt; public class Joiner extends Thread { private Sleeper sleeper; public Joiner(String name, Sleeper sleeper) { setName(name); this.sleeper = sleeper; start(); } @Override public void run() { try { // 如果某个线程在另一个线程t上调用t.join(), 此线程将被挂起, // 直到目标线程t结束才恢复(即t.isAlive() 返回为假) sleeper.join(); } catch (InterruptedException e) { System.out.println("Interrupted."); } System.out.println(getName() + " join completed"); } }
Test1.java
package com.anialy.test.multithread.JoinAndInterrupt; public class Test1 { public static void main(String[] args) { Sleeper sleeper1 = new Sleeper("线程A-1500", 1500); Joiner joiner1 = new Joiner("线程join-A", sleeper1); } }输出:
可以看到在第一条线程休眠1500毫秒之后,join-A的线程才完成
Test.java
package com.anialy.test.multithread.JoinAndInterrupt; public class Test2 { public static void main(String[] args) { Sleeper sleeper = new Sleeper("线程A-1500", 1500); Joiner joiner = new Joiner("线程Join-A", sleeper); sleeper.interrupt(); } }
输出:
由于对sleeper线程使用了interrupt,sleeper没有完成之前,就已经中断了join()
相关文章推荐
- java 多线程(1) join() / interrupt() 打断sleep() / stop() / run() / 线程停止的方法
- Java多线程的join和interrupt方法
- Java多线程之interrupt()方法与sleep(),join(),wait()的关系
- Java 多线程 join和interrupt 方法 (r)
- Java多线程中,Join和Interrupt()方法的使用
- Java多线程编程方法join -深入浅出Java
- java基本教程之join方法详解 java多线程教程
- java例程练习(多线程——join()方法)
- 关闭超时的java线程 --利用join和interrupt方法
- java多线程(二) sleep(),yield(),wait(), interrupt()方法
- java多线程系列_join方法的使用(5)
- java多线程状态及interrupt()方法
- java多线程总结三:sleep()、join()、interrupt()示例
- java多线程总结三:sleep()、join()、interrupt()示例
- Java多线程:(三)一些方法:start(),sleep(),yield(),join()
- java多线程-join方法
- java多线程总结三:sleep()、join()、interrupt()示例
- java多线程中的join方法详解
- 初学Java多线程:join方法的使用
- java 多线程 join()方法