当前位置:网站首页>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 .
边栏推荐
- Approval process design
- Jmeter线程组功能介绍
- 突破100万,剑指200万!
- C language brush questions ~leetcode and simple questions of niuke.com
- Remote file contains actual operation
- Location of software installation information and system services in the registry
- Record a jar package conflict resolution process
- Q2 encryption market investment and financing report in 2022: gamefi becomes an investment keyword
- 几种常见IO模型的原理
- uploads-labs靶场(附源码分析)(更新中)
猜你喜欢
Nifi from introduction to practice (nanny level tutorial) - flow
App移动端测试【3】ADB命令
[200 opencv routines] 217 Mouse interaction to obtain polygon area (ROI)
Break through 1million, sword finger 2million!
Mb10m-asemi rectifier bridge mb10m
From the 18th line to the first line, the new story of the network security industry
Rk3399 platform development series explanation (WiFi) 5.54. What is WiFi wireless LAN
记一次jar包冲突解决过程
“用Android复刻Apple产品UI”(3)—优雅的数据统计图表
App移动端测试【4】apk的操纵
随机推荐
App mobile terminal test [5] file writing and reading
Persisting in output requires continuous learning
[proteus simulation] 8 × 8LED dot matrix screen imitates elevator digital scrolling display
App mobile terminal test [3] ADB command
Hibernate的缓存机制/会话级缓存机制
Uploads labs range (with source code analysis) (under update)
"Remake Apple product UI with Android" (2) -- silky Appstore card transition animation
The difference between calling by value and simulating calling by reference
一些事情的反思
June to - -------
Function introduction of JMeter thread group
Slam learning notes - build a complete gazebo multi machine simulation slam from scratch (I)
Vs2017 is driven by IP debugging (dual machine debugging)
大csv拆分和合并
From "zero sum game" to "positive sum game", PAAS triggered the third wave of cloud computing
记一次jar包冲突解决过程
Approval process design
Get the executable path through the process PID (queryfullprocessimagename)
Redis installation under windows and Linux systems
【Proteus仿真】74HC595+74LS154驱动显示16X16点阵