第五章Java线程连接示例|
来源:网络
编辑:听音
时间:2022-06-19
在这篇文章中,我们将了解 Java 线程连接方法。
Thread 类的join()
方法可用于停止线程的当前执行,直到它加入的线程完成其任务。所以基本上,它等待调用 join 方法的线程死亡。例如: 这里当你调用 时t1.join()
,主线程会等待 t1 完成它的启动,然后再恢复它的执行。
// Main thread execution
Thread t1=new Thread(mr,"Thread 1");t1.start();
// lets waits for t1 to die
try {
t1.join();
} catch (InterruptedException e) {
连接方法的变体
连接方法有三种变体
调用 join 方法的线程死亡。
public final void join(long millis) 抛出 InterruptedException
在线程上调用此方法时,它会等待以下任一情况:
- 调用 join 方法的线程死亡。
- 指定毫秒
public final void join(long millis,int nanos) 抛出 InterruptedException
在线程上调用此方法时,它会等待以下任一情况:
- 调用 join 方法的线程死亡。
- 指定毫秒 + 纳秒
你知道吗?
如果调用 join 方法的线程已经终止或尚未启动,则 join 方法立即返回。
我们举一个简单的例子:
package org.arpit.java2blog;
public class MyRunnable implements Runnable {
public void run() {
try {
System.out.println(Thread.currentThread().getName() + " Start");
// thread sleeps for 4 secs
Thread.sleep(4000);
System.out.println(Thread.currentThread().getName() + " end");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
创造ThreadExampleMain.java
package org.arpit.java2blog;
public class ThreadExampleMain {
public static void main(String args[]) {
System.out.println("Main thread execution starts");
MyRunnable mr = new MyRunnable();
Thread t1 = new Thread(mr, "Thread 1");
Thread t2 = new Thread(mr, "Thread 2");
Thread t3 = new Thread(mr, "Thread 3");
t1.start();
// lets waits for t1 to die
try {
t1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
t2.start();
try {
// lets waits for 1 sec or t2 to die which ever occurs first
t2.join(1000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
t3.start();
// complete all threads before completing main thread
try {
t2.join();
t3.join();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
System.out.println("Main thread execution ends");
}
}
当您运行上述程序时,您将获得以下输出。
Main thread execution starts
Thread 1 Start
Thread 1 end
Thread 2 Start
Thread 3 Start
Thread 2 end
Thread 3 end
Main thread execution ends
现在让我们分析输出。
- 主线程执行开始。
-
Thread 1
开始(线程 1 开始),正如我们所说t1.join()
,它将等待t1
死亡(线程 1 结束)。 -
Thread 2
启动(线程 2 启动)并等待 1 秒或死亡,但由于我们在 run 方法中设置了 4 秒睡眠,它不会在 1 秒内死亡。所以主线程恢复并Thread 3
开始(线程3开始) -
正如我们所说
t2.join()
和t3.join()
。这 2 个线程将在退出主线程之前完成,因此线程 2 将结束(线程 2 结束),然后线程 3 将结束(线程 3 结束)。 - 主线程执行结束。
Java 线程连接和同步
Java 线程连接方法保证发生在关系之前。
这意味着如果线程t1
调用t2.join()
,那么 t2 所做的所有更改对 t1 都是可见的。
这就是 Java 线程连接示例的全部内容。
相关文章:
- [其它]第六章JavaFutureTask示例|
- [其它]第六章JavaScheduledThreadPoolExecutor示例|
- [其它]第六章使用Callable和Future的JavaExecutorService示例|
- [其它]第六章JavanewCachedThreadPool示例|
- [其它]第六章JavanewFixedThreadPool示例|
- [其它]第六章:为什么我们需要Executor框架?|
- [其它]第五章在java中使用3个线程打印序列|
- [其它]第五章java中notify和notifyAll的区别|
- [其它]第五章我们可以在java中启动一个线程两次吗|
- [其它]第五章java中的对象级锁定与类级锁定|
相关推荐:
- [其它]第三章java中的抽象类|
- [其它]第四章java中的TreeMap与示例|
- [其它]第四章java中的hashcode()和equals()方法|
- [其它]第六章JavaFutureTask示例|
- [其它]计算机组成原理PDF扫描格式电子版百度云网盘下载
- [其它]程序设计语言概念(第9版)[Robert W. Sebesta]pdf格式电子版百度云网盘下载[53.8M]
- [其它]程序员必读之软件架构[Simon Brown]pdf格式电子版百度云网盘下载[41.6M]
- [其它]程序员的思维修炼 开发认知潜能的九堂课[Andy Hunt]pdf格式电子版百度云网盘下载
- [其它]程序员的职业素养[Robert C. Martin]pdf格式电子版百度云网盘下载[21.6M]
- [其它]程序员教程(第3版)[张淑平]pdf格式电子版百度云网盘下载[136.5M]
栏目分类
最新文章
热门文章
- 计算机组成原理PDF扫描格式电子版百度云网盘下载
- 硅谷之谜[吴军]pdf格式电子版百度云网盘下载[59.5M]
- 自选基金助手,一款Chrome扩展程序
- 七周七语言 理解多种编程范型[Bruce A. Tate]pdf格式电子版百度云网盘下载[9M]
- 系统集成项目管理工程师考试考眼分析与样卷解析(2014版)[软考新大纲研究组]
- 程序员面试金典(第5版)[Gayle Laakmann McDowell]pdf格式电子版百度云网盘下载[81.5M]
- 创业维艰 如何完成比难更难的事[Ben Horowitz]pdf格式电子版百度云网盘下载[65.3
- 程序员的思维修炼 开发认知潜能的九堂课[Andy Hunt]pdf格式电子版百度云网盘下载
- 图灵的秘密 他的生平、思想及论文解读[Charles Petzold]pdf格式电子版百度云网盘下
- OCP OCA认证考试指南全册:Oracle Database 11g(1Z0-051、1Z0-052、1Z0-053)[John Watson]pdf格式