62,628
社区成员
发帖
与我相关
我的任务
分享
/**
* 模拟N个线程同时执行任务,每个线程执行完自己的任务后做一个计数,所有线程结束后统计一共执行了多少个任务。
* (原则上应该是一个线程对应一个任务,因此运行了多少个线程就应该是执行了多少个任务)。
*/
public class ThreadSyn {
//任务执行计数器
public int number = 0;
//模拟执行任务
public void doTask(){
try {
//模拟任务执行消耗的时间
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
//在没有加同步锁的情况下进行计数,执行完后注释这行,打开下面的三行代码,看看结果有何不同。
number++;
//在加了同步锁的情况下进行计数,执行完后注释这三行,打开上面的一行代码,看看结果有何不同。
// synchronized(this){
// number++;
// }
}
public static void main(String[] args) {
final ThreadSyn syn = new ThreadSyn();
syn.number = 0;
//模拟100个线程同时执行任务。
for(int i=0;i<100;i++){
new Thread(new Runnable(){
@Override
public void run() {
syn.doTask();
}
}).start();
}
//这段代码的目的是保证上面的100个线程都执行完毕才退出循环,保证后面取到的number是线程执行完的计数结果。
while(Thread.activeCount()>1){
Thread.yield();
}
//打印执行了多少个任务。
System.out.println(syn.number);
}
}