Моя цель - получить доступ к потокам в статическом атрибуте «nbPlace» ONE AT TIME и уменьшить его. Я использую переменную «mutex», чтобы каждый поток уменьшался каждый раз, однако что-то пошло не так. Вот мой код:блокировка потоков в java с помощью семафора
public class Client extends Thread{
static int nbPlace=10;
static int mutex=1;
public Client(String name){
super(name);
}
public void run(){
if (mutex==1) {
mutex=0;
decrementer(getName());
mutex=1;
} else
try {
join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
static void decrementer(String nomThread){
nbPlace--; System.out.println("dec par "+nomThread+" ... nbplace="+nbPlace);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Client [] t= new Client[5];
for(int i=0;i<5;i++) t[i]=new Client ("thread n° "+i);
for (int i=0;i<5;i++) t[i].start();
}
}
Почему бы не просто сделать метод 'декрементер'' синхронизированным'? –
«Что-то пошло не так», можете ли вы уточнить? –
Есть ли веская причина не использовать AtomicInteger или CountdownLatch? Или Семафор, если на то пошло. –