多线程java中的重复输出
我是多线程编程新手。代码不符合我的要求:多线程java中的重复输出,java,multithreading,Java,Multithreading,我是多线程编程新手。代码不符合我的要求: public class Test { static int i; public static void main(String[] args) { ExecutorService executor = Executors.newFixedThreadPool(10); for(i = 0; i<10 ;i++) { executor.execute(new Runnable
public class Test {
static int i;
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(10);
for(i = 0; i<10 ;i++) {
executor.execute(new Runnable() {
public void run () {
System.out.println(i);
}
});
}
}
}
公共类测试{
静态int-i;
公共静态void main(字符串[]args){
ExecutorService executor=Executors.newFixedThreadPool(10);
对于(i=0;i不将静态i
传递给run
:
public class Test {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(10);
for(int i = 0; i < 10 ;i++){
int x = i;
executor.execute(new Runnable(){
public void run (){
System.out.println(x);
}
});
}
}
}
公共类测试{
公共静态void main(字符串[]args){
ExecutorService executor=Executors.newFixedThreadPool(10);
对于(int i=0;i<10;i++){
int x=i;
executor.execute(新的Runnable(){
公开作废运行(){
系统输出println(x);
}
});
}
}
}
您可以拥有一个实现可运行的类,并使用构造函数将静态字段复制到实例字段中:
executor.execute(new MyRunnable(i));
class MyRunnable implements Runnable {
int i;
public MyRunnable(int i) {
this.i = i;
}
// run method
}
这保证了每个线程在for
循环中都有自己的唯一整数,其顺序与i
的顺序完全相同。感谢您的评论,一旦我删除了i,runnable就看不到我了。抱歉,我失败了。更新了答案。您正在打印线程运行时发生的i
。我很惊讶这不仅仅是10
每次线程都需要一些时间才能启动。感谢您的回复,我只是想知道有什么更好的方法可以做到这一点,您的答案或ka4eli的答案我认为两者归结为几乎相同的编译代码,因此具有相同的性能。如果我没有错的话,另一个答案需要Java 8编译。