Я попытался добавить 1 к «глобальному счетчику» по каждой теме. Таким образом, результат «глобального счетчика» должен быть равен 10. Я распечатываю каждый результат каждой нити. В большинстве случаев последним результатом является 10. но некоторое время 10 не является последним числом. Я использовал синхронизацию или блокировку, но не работал.начинающий | threadPool | распечатать каждый результат | неправильный результат
спасибо. Надеюсь, мой английский не так уж плох.
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();
}
}
печати выход в вопросе –
результатом является случайным. вот так: Результат: 5 pool-1-thread-1 Результат: 6 pool-1-thread-6 Результат: 5 pool-1-thread-4 Результат: 5 pool-1-thread-2 Результат: 5 pool-1-thread-3 Результат: 5 pool-1-thread-5 Результат: 7 pool-1-thread-7 Результат: 8 pool-1-thread-8 Результат: 9 pool-1-thread- 9 Результат: 10 pool-1-thread-10 – Cashew
Это ожидаемый результат без синхронизации. – Fildor