thread.join
1。问题由来(这个程序得到的结果是0)
package com.haut.thread;
/**
* @author shuiyu_lei
* @date 2017/12/16
*/
public class AccountingVol implements Runnable {
static AccountingVol accountingVol = new AccountingVol();
static volatile int i = 0;
public static void increase() {
i++;
}
@Override
public void run() {
for (int j = 0; j < 1000; j++) {
increase();
}
}
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(accountingVol);
Thread thread1 = new Thread(accountingVol);
thread.start();
thread1.start();
System.out.println(i);
}
}
2继续看,现在程序得到的值小于2000
package com.haut.thread;
/**
* @author shuiyu_lei
* @date 2017/12/16
*/
public class AccountingVol implements Runnable {
static AccountingVol accountingVol = new AccountingVol();
static volatile int i = 0;
public static void increase() {
i++;
}
@Override
public void run() {
for (int j = 0; j < 1000; j++) {
increase();
}
}
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(accountingVol);
Thread thread1 = new Thread(accountingVol);
thread.start();
thread1.start();
thread.join();
thread1.join();
System.out.println(i);
}
}
3。理解如果不使用join方法,得到的i基本上是0或者 很小的数字,因为thread和thread1线程可能还没开始运行地,主线程程序就把i的值输出了,使用了join方法后,表示这个主线程愿意等待这个新加入的线程,直到它执行完。
文章最后发布于: 2017-12-16 16:51:26
相关阅读
终止线程两个函数:ExitThread() 和 TerminateThread()
若要终止线程的运行,可以使用下面四种的方法:线程函数退出循环来返回 (最佳方法 )。通过调用ExitThread 函数,线程将自行撤消(尽
马尔可夫预测的性质及运用 对事件的全面预测,不仅要能够指出事件发生的各种可能结果,而且还必须给出每一种结果出现的概率,说明被预
iPhone上传照片到iCloud后本地保存的是一个缩略图,更换手机时通过iTools、爱思助手导出相册需要将这些照片下载原件到手机,一个图片
新一期的dnf签到活动开始啦,每天签到就可以领取到好礼,想要知道DNF4月签到活动有哪些奖励吗,一起来看看吧。4月签到奖励活动时间:4月1
回归(Regression)不同于分类问题,在回归方法中我们预测一系列连续的值,在预测完后有个问题是如何评价预测的结果好坏,关于这个问题目前