29
Окт
2015

Java многопоточность

В процессе написания программы на яве с использованием нитей столкнулся с проблемой.В программе запущено сразу 8 нитей. Каждая нить должна выводить на экран сообщения типа :

1 Андрей Снял со счёта 98 Cейчас на счёту: 4902

где первая цифра это :

private int id = 1;

и доступ к ней реализован через

public synchronized int idPlus() {
   return  id++;
}
public  synchronized int getId() {
    return id;
}

часть кода выполняемой нити:

bank.putOn(currsumm);
String s = getId() + " " + Thread.currentThread().getName() + " Положил на счёт " + currsumm + " Cейчас на счёту: " + bank.getBalance();
System.out.println(s);              
idPlus();

Но когда запускаю программу переменная id с одинакомым значеним может выскочить несколько раз. И получается, что то вроде этого :

1 Борис Снял со счёта 106 Cейчас на счёту: 4751

1 Галя Снял со счёта 63 Cейчас на счёту: 4751

1 Валентин Снял со счёта 80 Cейчас на счёту: 4751

1 Андрей Положил на счёт 99 Cейчас на счёту: 4850

Уже объявлял переменную id volatile и вызывал у нитей join(); Что можете подсказать с по данной проблеме ?

Весь код : https://ideone.com/MygrDN

Источник: https://ru.stackoverflow.com/questions/462204/java-%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D0%BF%D0%BE%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D1%81%D1%82%D1%8C

Share

Тебе может это понравится...