Java多线程的join和interrupt方法
来源:互联网 发布:什么软件推广最好 编辑:程序博客网 时间:2024/06/06 20:04
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 方法
- Java 多线程 join和interrupt 方法 (r)
- Java多线程中,Join和Interrupt()方法的使用
- 关闭超时的java线程 --利用join和interrupt方法
- Java多线程之interrupt()方法与sleep(),join(),wait()的关系
- java 多线程(1) join() / interrupt() 打断sleep() / stop() / run() / 线程停止的方法
- java 多线程(2) 线程的调度和优先级 / sleep() / interrupt() 打断join() / yield() / setPriority()
- Java中的多线程:sleep, wait, join 与 interrupt()的关系
- java多线程中的interrupt方法的使用
- Java多线程中的interrupt方法的使用
- Java多线程sleep(),join(),interrupt(),wait(),notify()
- Java多线程sleep(),join(),interrupt(),wait(),notify()
- Java多线程sleep(),join(),interrupt(),wait(),notify()
- Java多线程sleep(),join(),wait(),interrupt()
- Java多线程sleep(),join(),interrupt(),wait(),notify()
- Java多线程sleep(),join(),interrupt(),wait(),notify()
- Java多线程sleep(),join(),interrupt(),wait(),notify()
- ln 无法创建符号链接asm 只读文件系统
- 红包生成算法
- CD Making 逻辑数学题
- Intellij idea下使用Maven管理的Spring+SpringMVC+Mybatis的整合
- 使用ICP得到的变换矩阵更新相机位置
- Java多线程的join和interrupt方法
- sublime text3 快捷键
- JAVA在win10上的安装环境配置
- 三种常见的文件共享服务--ftp,nfs,samba 区别和配置
- 用python 控制台打印图片示例
- Java运算符
- ctf常识
- python——内置类型——函数
- 浅谈递归递推