当前位置:网站首页>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 .
边栏推荐
- 切入点表达式
- “用Android复刻Apple产品UI”(3)—优雅的数据统计图表
- NFT新的契机,多媒体NFT聚合平台OKALEIDO即将上线
- 使用AUR下载并安装常用程序
- 【OpenCV 例程200篇】217. 鼠标交互获取多边形区域(ROI)
- Remote file contains actual operation
- WinDbg analysis dump file
- "Remake Apple product UI with Android" (3) - elegant statistical chart
- Redis在Windows以及Linux系统下的安装
- Advanced Mathematics (Seventh Edition) Tongji University exercises 2-1 personal solutions
猜你喜欢

Intelij idea efficient skills (III)

Download and install common programs using AUR
![[redis foundation] understand redis master-slave architecture, sentinel mode and cluster together (Demo detailed explanation)](/img/1f/3dd95522b8d5f03dd763a6779e3db5.jpg)
[redis foundation] understand redis master-slave architecture, sentinel mode and cluster together (Demo detailed explanation)

Introduction series of software reverse cracking (1) - common configurations and function windows of xdbg32/64

Project -- high concurrency memory pool

【Proteus仿真】8×8LED点阵屏仿电梯数字滚动显示

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

Function introduction of JMeter thread group

Unity function - unity offline document download and use

First knowledge of database
随机推荐
Using optimistic lock and pessimistic lock in MySQL to realize distributed lock
Batch files: list all files in a directory with relative paths - batch files: list all files in a directory with relative paths
几种常见IO模型的原理
六月 致 -.-- -..- -
Hibernate的缓存机制/会话级缓存机制
突破100万,剑指200万!
nifi从入门到实战(保姆级教程)——flow
【OpenCV 例程200篇】217. 鼠标交互获取多边形区域(ROI)
Rk3399 platform development series explanation (WiFi) 5.54. What is WiFi wireless LAN
pycharm错Error updating package list: connect timed out
Record a jar package conflict resolution process
Redis high availability and persistence
[combinatorics] combinatorial identity (sum of variable upper terms 1 combinatorial identity | summary of three combinatorial identity proof methods | proof of sum of variable upper terms 1 combinator
Use percent sign in CString
半监督学习
App移动端测试【4】apk的操纵
坚持输出需要不断学习
[combinatorics] combinatorial identities (sum of variable terms 3 combinatorial identities | sum of variable terms 4 combinatorial identities | binomial theorem + derivation to prove combinatorial ide
Driver and application communication
一些事情的反思