当前位置:网站首页>Multithread 02 thread join
Multithread 02 thread join
2022-07-03 16:09:00 【Cool Wang sledgehammer】
join Use
effect : Ensure the visibility of thread execution results
/**
* @Author: wy
*/
public class MyThread {
private static Integer i = 1;
private static Integer j = 2;
public static void main(String[] args) throws InterruptedException {
Thread thread1 = new Thread(() -> {
i=j+1;
j=i;
});
Thread thread2 = new Thread(() -> {
i=3;
j=i;
});
thread1.start();
thread2.start();
Thread.sleep(100);
System.out.println("i:"+i);
System.out.println("j:"+j);
}
}In the above code , In the ideal state, if thread1 and thread2 If it is executed in sequence , The result that we should get is i=4,j=4.
But we know that , We just did start Method , Does not mean that the thread starts running , Not immediately run Method .
At this point, the thread just becomes ready , Which thread executes depends on the scheduling algorithm of the operating system .(window Medium is preemptive , That is, which thread grabs cpu Resources will not be released until the thread is completed .
linux Medium is time-sharing scheduling , That is, the execution time of a given thread , When the time comes, no matter whether the execution is completed or not, the resources must be released )
In order to ensure that thread1 Do it after the execution thread2 Words , have access to join Method .
/**
* @Author: wy
*/
public class MyThread {
private static Integer i = 1;
private static Integer j = 2;
public static void main(String[] args) throws InterruptedException {
Thread thread1 = new Thread(() -> {
i=j+1;
j=i;
});
Thread thread2 = new Thread(() -> {
i=3;
j=i;
});
thread1.start();
thread1.join(); // Use join Method , Pause the current process , know thread1 Completion of execution
thread2.start();
Thread.sleep(100);
System.out.println("i:"+i);
System.out.println("j:"+j);
}
}In this way, we can guarantee thread2 really thread1 Executed after execution .
Why?
join End the current process , Until the specified execution is completed .

From this picture, we can see thread2 really thread1 After that .
Again join We can see in the code of
public final synchronized void join(long millis)
throws InterruptedException {
long base = System.currentTimeMillis();
long now = 0;
if (millis < 0) {
throw new IllegalArgumentException("timeout value is negative");
}
if (millis == 0) {
while (isAlive()) {
// call wait Method
wait(0);
}
} else {
while (isAlive()) {
long delay = millis - now;
if (delay <= 0) {
break;
}
wait(delay);
now = System.currentTimeMillis() - base;
}
}
}Here it is. join It is through wait, and notify To operate the process to achieve this effect .
边栏推荐
- Slam learning notes - build a complete gazebo multi machine simulation slam from scratch (II)
- Go language self-study series | if else if statement in golang
- How to use AAB to APK and APK to AAB of Google play apps on the shelves
- [200 opencv routines] 217 Mouse interaction to obtain polygon area (ROI)
- 相同切入点的抽取
- How idea starts run dashboard
- Driver and application communication
- "Everyday Mathematics" serial 56: February 25
- 无心剑中译泰戈尔《漂鸟集(1~10)》
- 远程文件包含实操
猜你喜欢

半监督学习

Nifi from introduction to practice (nanny level tutorial) - flow

Myopia: take off or match glasses? These problems must be understood clearly first

Create gradle project

App移动端测试【5】文件的写入、读取

工资3000,靠“视频剪辑”月入40000:会赚钱的人,从不靠拼命!

App移动端测试【4】apk的操纵

Unityshader - materialcapture material capture effect (Emerald axe)
![[系统安全] 四十三.Powershell恶意代码检测系列 (5)抽象语法树自动提取万字详解](/img/cd/00954b9c592c253d42e6a3b8298999.jpg)
[系统安全] 四十三.Powershell恶意代码检测系列 (5)抽象语法树自动提取万字详解

Microservices Seata distributed transactions
随机推荐
Microservices Seata distributed transactions
Record a jar package conflict resolution process
QT use qzxing to generate QR code
Redis high availability and persistence
Myopia: take off or match glasses? These problems must be understood clearly first
Find mapping relationship
[combinatorics] combinatorial identity (sum of combinatorial identity products 1 | sum of products 1 proof | sum of combinatorial identity products 2 | sum of products 2 proof)
分布式事务(Seata) 四大模式详解
Redis在Windows以及Linux系统下的安装
MB10M-ASEMI整流桥MB10M
Rk3399 platform development series explanation (WiFi) 5.54. What is WiFi wireless LAN
Salary 3000, monthly income 40000 by "video editing": people who can make money never rely on hard work!
探索Cassandra的去中心化分布式架构
Backtracking method to solve batch job scheduling problem
Break through 1million, sword finger 2million!
First knowledge of database
Slam learning notes - build a complete gazebo multi machine simulation slam from scratch (III)
[系统安全] 四十三.Powershell恶意代码检测系列 (5)抽象语法树自动提取万字详解
Semi supervised learning
Redis installation under windows and Linux systems