gpt4 book ai didi

java - 简单的Java多线程

转载 作者:行者123 更新时间:2023-12-01 22:29:44 24 4
gpt4 key购买 nike

我运行了以下 java 代码来测试多线程。我想让每个线程将索引变量增加 1。但是以下不起作用。

public class start {
public static void main(String[] args) {
// TODO Auto-generated method stub

Thread[] threadList = new Thread[20];

for (int i = 0; i < 20; i++) {
threadList[i] = new worker();
threadList[i].start();
}
}
}

public class worker extends Thread {
private static int index = 0;

public static synchronized int getIndex() {
return index++;
}

public void run() {
index = getIndex();
System.out.println("Thread Name: "+Thread.currentThread().getName() + "index: "+index);
}
}

它给了我以下结果:

Thread Name: Thread-0index: 0
Thread Name: Thread-2index: 0
Thread Name: Thread-4index: 0
Thread Name: Thread-1index: 0
Thread Name: Thread-6index: 0
Thread Name: Thread-8index: 0
Thread Name: Thread-5index: 0
Thread Name: Thread-7index: 0
Thread Name: Thread-3index: 0
Thread Name: Thread-9index: 0
Thread Name: Thread-13index: 0
Thread Name: Thread-11index: 0
Thread Name: Thread-12index: 0
Thread Name: Thread-10index: 0
Thread Name: Thread-14index: 0
Thread Name: Thread-17index: 0
Thread Name: Thread-15index: 0
Thread Name: Thread-19index: 0
Thread Name: Thread-16index: 0
Thread Name: Thread-18index: 0

索引值没有改变。如何解决这个问题?

最佳答案

此分配正在重置 index 的值(并且不同步):

index = getIndex();

覆盖增量运算符的效果。一种可能的解决方案是将 getIndex() 的结果存储在局部变量中:

final int i = getIndex();
System.out.println("Thread Name: " +
Thread.currentThread().getName() +
"index: " +
i);
<小时/>

"implements Runnable" vs. "extends Thread"

关于java - 简单的Java多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28069862/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com