67,513
社区成员
发帖
与我相关
我的任务
分享
package com.test;
public class Task implements Runnable {
private static int id = 0;
private int threadID = 0;
public Task() {
}
public void run() {
synchronized(this){
threadID = id;
System.out.println("id=" + id++);
System.out.println("threadID=" + threadID);
}
}
}
for(int i=0;i<10;i++){
es.execute(new Task());
}
会产生10个实例,第一个实例d为0,threadID也为0,由于d为static,第二个实例d为1,threadID为1,以此类推10个实例。
线程池执行实例的start()方法和创建实例的先后没准,你这个是创建好4个实例后,才执行第一个实例的start方法,就会出现:
threadID=0
id=5
线程池是同步的,所以10个线程执行没有先后,就会出现:
threadID=8
id=10
threadID=4
第9个创建的实例执行start后,第5个创建的实例才执行start。
如有错误请纠正。