class Sample{
public static void main(String[] args) {
final CountDownLatch count = new CountDownLatch(100);
//java的线程池
final ExecutorService executorService = Executors.newFixedThreadPool(100);
for (int i = 0; i < 100; i++) {
// int j = i;
executorService.submit(new Runnable() {
@Override
public void run() {
System.out.println(i);
}
});
}
}
}
原因:内部类中使用但未声明的任何局部变量必须在内部类的正文之前明确分配。
解决办法:在for循环内,将i的值重新赋值给另外一个变量int j = i;
class Sample{
public static void main(String[] args) {
final CountDownLatch count = new CountDownLatch(100);
//java的线程池
final ExecutorService executorService = Executors.newFixedThreadPool(100);
for (int i = 0; i < 100; i++) {
int j = i;
executorService.submit(new Runnable() {
@Override
public void run() {
System.out.println(j);
}
});
}
}
}