Я создал FixedThreadPool для 1000 потоков.Каждый отдельный поток должен увеличивать глобальный счетчик на единицу.Так что на самом деле это часть задания по программированию, я не хочу прямого ответа, и я уже потратил несколько часов на эту проблему.
Так что некоторые советы будут с благодарностью.Итак, это мой код:
public class ThreadSpawner {
private int sum = 0;
public static void main(String[] args){
ThreadSpawner ts = new ThreadSpawner();
ts.doWork();
}
public void doWork(){
ExecutorService executor = Executors.newFixedThreadPool(1000);
for(int i =0;i<1000;i++){
executor.execute(new Runnable(){
@Override
public void run() {
System.out.println("Value: " + sum + Thread.currentThread());
counter();
}
public synchronized void counter(){
sum++;
}
});
}
executor.shutdown();
}
}
Назначение специально задает вопрос: "Напишите программу, которая запускает 1000 потоков. Каждый поток добавляет 1 к переменной sum, которая изначально равна 0. Определите оболочку IntegerОбъект для хранения суммы. Запустите программу с синхронизацией и без нее, чтобы увидеть ее эффект. Вы можете использовать newFixedThreadPool () для создания фиксированного числа потоков в пуле."
Я уже пробовалс отдельным запускаемым классом задач для потоков.Однако я не могу найти способ редактировать переменную суммы из потоков.
Этот способ внутреннего потока, который я использую сейчас, по крайней мере, показывает несколько правильное поведение.
Может ли кто-нибудь рассказать о том, что было бы более правильным способом решения такой проблемы?
- Я также не уверен относительно того, как и где правильно реализовать ключевое слово синхронизациизаставить потоки синхронизироваться.
С уважением!Sietze