当前位置:网站首页>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 .
边栏推荐
- 六月 致 -.-- -..- -
- Mongodb installation and basic operation
- [redis foundation] understand redis master-slave architecture, sentinel mode and cluster together (Demo detailed explanation)
- Srs4.0+obs studio+vlc3 (environment construction and basic use demonstration)
- 远程文件包含实操
- 《微服务设计》读书笔记(上)
- Myopia: take off or match glasses? These problems must be understood clearly first
- Create gradle project
- Using optimistic lock and pessimistic lock in MySQL to realize distributed lock
- Pychart error updating package list: connect timed out
猜你喜欢
2022年Q2加密市场投融资报告:GameFi成为投资关键词
How can technology managers quickly improve leadership?
Microservice API gateway zuul
Mixlab编辑团队招募队友啦~~
Three dimensional reconstruction of deep learning
Subclass hides the function with the same name of the parent class
Mb10m-asemi rectifier bridge mb10m
深度学习之三维重建
[redis foundation] understand redis persistence mechanism together (rdb+aof graphic explanation)
“用Android复刻Apple产品UI”(3)—优雅的数据统计图表
随机推荐
切入点表达式
Distributed task scheduling XXL job
请求头不同国家和语言的表示
Jmeter线程组功能介绍
Use percent sign in CString
Stm32f103c8t6 firmware library lighting
Principles of several common IO models
Pyinstaller is not an internal or external command, nor is it a runnable program or batch file
Batch files: list all files in a directory with relative paths - batch files: list all files in a directory with relative paths
NFT新的契机,多媒体NFT聚合平台OKALEIDO即将上线
Problems of CString in multithreading
Go language self-study series | golang switch statement
Go语言自学系列 | golang中的if else if语句
Download and install common programs using AUR
坚持输出需要不断学习
相同切入点的抽取
Redis high availability and persistence
Secsha system 1- login function
使用AUR下载并安装常用程序
C language brush questions ~leetcode and simple questions of niuke.com