我试图将1添加到"全球计数器"每个线程。所以"全球计数器的结果"必须是10。 我打印出每个线程结果。大部分时间最后的结果是10.但有时候10不是最后一个数字。我使用了synchronized或lock,但它不起作用。
谢谢。我希望我的英语不是太糟糕。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Hauptprogramm {
public static final int MAX_THREADS = 10;
public static int globalCounter;
public static void main(String[] args) {
// create a pool of threads, 10 max jobs will execute in parallel
ExecutorService threadPool = Executors.newFixedThreadPool(MAX_THREADS);
// submit jobs to be executing by the pool
for (int i = 0; i < MAX_THREADS; i++) {
threadPool.submit(new Runnable() {
public void run() {
// some code to run in parallel
globalCounter++;
String originalName = Thread.currentThread().getName();
System.out.println("Result: "+globalCounter+" "+originalName);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
});
}
threadPool.shutdown();
}
}
答案 0 :(得分:1)
我对这次考试的期望感到徘徊,因为我还没有50个声望,我无法添加评论。
Java线程在JVM中运行,在高级别的资源分配中无法控制,如果您被要求让线程开始执行,请使用释放锁定机制,但是没有保证它会按顺序执行,如果你按顺序执行它,你需要做一些逻辑来识别需要执行的线程。
答案 1 :(得分:0)
我认为现在就是这样:
public void run() {
synchronized(Hauptprogramm.class)
{
globalCounter++;
String originalName = Thread.currentThread().getName();
System.out.println("Result: " + globalCounter + " " + originalName);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
}
}});
}
threadPool.shutdown();
}
}