当前位置:网站首页>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 .
边栏推荐
- CString getbuffer and releasebuffer instructions
- The wonderful use of do{}while()
- Why can't strings be directly compared with equals; Why can't some integers be directly compared with the equal sign
- Nifi from introduction to practice (nanny level tutorial) - flow
- Secsha system 1- login function
- [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
- Embedded development: seven reasons to avoid open source software
- Break through 1million, sword finger 2million!
- Microservices Seata distributed transactions
- Download and install common programs using AUR
猜你喜欢

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
![[web security] - [SQL injection] - error detection injection](/img/18/5c511871dab0e5c684b6b4c081c061.jpg)
[web security] - [SQL injection] - error detection injection

《微服务设计》读书笔记(下)

Microservice - fuse hystrix

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

初试scikit-learn库

2022年Q2加密市场投融资报告:GameFi成为投资关键词

Remote file contains actual operation

WinDbg analysis dump file
随机推荐
Win32 create window and button (lightweight)
Use percent sign in CString
[proteus simulation] 74hc595+74ls154 drive display 16x16 dot matrix
"Remake Apple product UI with Android" (3) - elegant statistical chart
请求头不同国家和语言的表示
使用AUR下载并安装常用程序
【Proteus仿真】8×8LED点阵屏仿电梯数字滚动显示
Subclass hides the function with the same name of the parent class
Detailed explanation of four modes of distributed transaction (Seata)
Problems of CString in multithreading
Find mapping relationship
突破100万,剑指200万!
The difference between mutually exclusive objects and critical areas
Under VC, Unicode and ANSI are converted to each other, cstringw and std:: string are converted to each other
一些事情的反思
Project -- high concurrency memory pool
App移动端测试【3】ADB命令
[系统安全] 四十三.Powershell恶意代码检测系列 (5)抽象语法树自动提取万字详解
Pyinstaller is not an internal or external command, nor is it a runnable program or batch file
pyinstaller不是内部或外部命令,也不是可运行的程序 或批处理文件