多线程 -- join()方法
来源:互联网 发布:宝宝拍照换装的软件 编辑:程序博客网 时间:2024/05/18 00:13
join()方法是指让主线程等待子线程结束后,才继续运行,并且同sleep()方法一样不会释放锁。
一.没有join()方法
public class MyThread1 implements Runnable {private static int a = 0;public static void main(String[] args) {// TODO Auto-generated method stubMyThread1 R = new MyThread1();Thread t1 = new Thread(R);t1.start();System.out.println(Thread.currentThread().getName()+", main线程中: a = "+a);}@Overridepublic void run() {// TODO Auto-generated method stubprint();}private void print() { // TODO Auto-generated method stubfor(int i=0;i<5;i++){a=a+1;//System.out.println(Thread.currentThread().getName()+" i = "+i); }System.out.println(Thread.currentThread().getName()+", 线程t1中: a = "+a);}}
main线程中输出的结果是随机的:
情况一:
main, main线程中: a = 0
Thread-0, 线程t1中: a = 5
情况二:
main, main线程中: a = 5
Thread-0, 线程t1中: a = 5
二。如果想让main线程中输出的结果也是5,加入t1.join();方法
public class MyThread1 implements Runnable {private static int a = 0;public static void main(String[] args) {// TODO Auto-generated method stubMyThread1 R = new MyThread1();Thread t1 = new Thread(R);t1.start();try {t1.join();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(Thread.currentThread().getName()+", main线程中: a = "+a);}@Overridepublic void run() {// TODO Auto-generated method stubprint();}private void print() { // TODO Auto-generated method stubfor(int i=0;i<5;i++){a=a+1;//System.out.println(Thread.currentThread().getName()+" i = "+i); }System.out.println(Thread.currentThread().getName()+", 线程t1中: a = "+a);}}
打出的log一定是下面的:
Thread-0, 线程t1中: a = 5
main, main线程中: a = 5
t1.join();这行代码在这里的作用,如果子线程t1没有执行完,是不会执行main线程的打印那行代码。
主线程和线程t1的运行状态如下图所示:
0 0
- java多线程-join方法
- 多线程之Join方法
- 多线程 -- join()方法
- 多线程中的join方法
- 多线程(join方法)
- 【多线程-Join()方法】
- 多线程之join方法
- 多线程的join()方法
- 多线程中的Join()方法
- 多线程的join方法
- 多线程join方法解析
- Java 多线程join方法
- java多线程join方法
- C#多线程JOIN方法初探
- 黑马程序员---多线程join()方法
- C#多线程JOIN方法初探
- java多线程中join()方法
- java多线程 中的join方法
- spring applicationContext.xml 文件中<context:component-scan/>使用详解
- FFMPEG类库打开流媒体的方法(需要传参数的时候)
- quartz 与Spring的整合-Quartz中的job如何自动注入spring容器托管的对象
- Android自定义控件实战——仿淘宝商品浏览界面
- Java模拟HTTP请求,带cookie
- 多线程 -- join()方法
- 第八周 项目一 (3)
- 你想建设一个能承受500万PV/每天的网站吗?如果计算呢?
- 一次OOM引起的优化
- php文件操作 复制 上传
- vb2_buffer结构探究
- swift 单利类的编码方式
- Android自定义控件实战——水流波动效果的实现WaveView
- Android Fragment 体系源码跟踪笔记(2)