Java多线程的join和interrupt方法
2017-04-14 21:50
387 查看
Java的
join()官方的解释:
Waits for this thread to die.
等待当前线程直到当前线程结束。
假设现在有
A、
B,线程
A在线程
B内调用
A.join(),那么线程
B会被挂起,直到
A线程完成后才恢复。
比如线程没有使用
join
public class TestJoin { public static void main(String[] args) throws Exception { TestJoin testJoin = new TestJoin(); Thread task = new Thread(testJoin.new Task()); System.out.println("Begin Time: " + new Date()); task.start(); System.out.println("Finish Time: " + new Date()); } class Task implements Runnable { @Override public void run() { try { Thread.sleep(2000); System.out.println("task: " + new Date()); } catch (InterruptedException e) { e.printStackTrace(); } } } }
控制台输出
Begin Time: Fri Apr 14 21:36:46 CST 2017
Finish Time: Fri Apr 14 21:36:46 CST 2017
task: Fri Apr 14 21:36:48 CST 2017
Task线程最后完成,等待了
2s。
在
task.start();后面添加
task.join()
... System.out.println("Begin Time: " + new Date()); task.start(); task.join(); System.out.println("Finish Time: " + new Date()); ...
控制台输出
Begin Time: Fri Apr 14 21:38:36 CST 2017
task: Fri Apr 14 21:38:38 CST 2017
Finish Time: Fri Apr 14 21:38:38 CST 2017
可以看到主线程被挂起,等待了
2s,直到
task完成主线程才恢复。
使用
interrupt()方法可以中断
join()方法的调用。 继续上面的
A、
B线程,
A线程调用了
join(),导致
B线程挂起,如果
A线程调用
interrupt(),则
A线程被中断,抛出
InterruptedException异常,
B线程恢复。
现在修改
Task类
public class TestJoin { public static void main(String[] args) throws Exception { TestJoin testJoin = new TestJoin(); Thread task = new Thread(testJoin.new Task()); System.out.println("Begin Time: " + new Date()); task.start(); task.join(); System.out.println("Finish Time: " + new Date()); } class Task implements Runnable { @Override public void run() { try { Thread.currentThread().interrupt(); Thread.sleep(2000); System.out.println("task: " + new Date()); } catch (InterruptedException e) { System.out.println("Task is interrupted"); } } } }
在
Task的
run方法中调用
Thread.currentThread().interrupt();
控制台输出
Begin Time: Fri Apr 14 21:45:11 CST 2017
Task is interrupted
Finish Time: Fri Apr 14 21:45:11 CST 2017
Task线程被终止,主线程继续运行。
相关文章推荐
- Java 多线程 join和interrupt 方法
- Java 多线程 join和interrupt 方法 (r)
- Java多线程之interrupt()方法与sleep(),join(),wait()的关系
- Java多线程中,Join和Interrupt()方法的使用
- java 多线程(1) join() / interrupt() 打断sleep() / stop() / run() / 线程停止的方法
- 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()方法