Я создал программу, которая создает 1000 потоков, и каждый поток добавляет 1 к переменной сумме. Моя проблема заключается в том, что я получаю только 1 сек.Создание 1000 потоков для изменения значения переменной
Вот программа:
class Threading implements Runnable{
T6_Q1 sumObject=new T6_Q1();
Thread t;
Threading(){
t=new Thread(this);
t.start();
}
@Override
public void run() {
setSumValue();
System.out.println(sumObject.getSum());
}
public void setSumValue(){
Integer value=sumObject.getSum().intValue()+1;
sumObject.setSum(value);
}
}
public class T6_Q1
{
Integer sum =new Integer(0);
public void setSum(int value){
this.sum=new Integer(value);
}
//method to get the sum value
public Integer getSum(){
return this.sum;
}
public static void main(String[] args) {
//launches 1000 threads
for(int i=1;i<=1000;i++)
{
new Threading();
}
}
}
Даже если я синхронизирован метод setSumValue я только получить 1s. Что я здесь делаю неправильно? (Новым для нарезки, так что все еще бит трудно понять ошибки)
Спасибо за ваше время.
Я согласен со всем, кроме части «поражения цели». Это, очевидно, всего лишь минимальный пример, в более широком контексте потокобезопасная версия имела бы смысл. –
@MarkoTopolnik: Нет; 'AtomicInteger'. – SLaks
Хорошо, это совет Java pro, и работает только тогда, когда этот пример взят буквально. Возможно, есть больше работы, чем просто мутация одной переменной. Также учтите, что блокировки на самом деле более эффективны, чем CAS при высокой нагрузке. –