У меня возникла проблема с синхронизацией двух потоков.
Это главное:
public class Main {
public static void main(String[] args) throws InterruptedException {
new Thread(new TaskA()).start();
//Thread.currentThread().sleep(3000);
new Thread(new TaskB()).start();
}
}
и это мои два потока, которые увеличивают / уменьшают общую переменную "count"
public class TaskA extends Manager implements Runnable {
@Override
public void run() {
while(true){
try {
decrement();
System.out.println("Thread A: " + getCount());
Thread.sleep((long) Math.random()%4000);
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}
}
public class TaskB extends Manager implements Runnable {
@Override
public void run() {
while(true){
try {
increment();
System.out.println("Thread B: " + getCount());
Thread.sleep((long) Math.random()%4000);
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}
}
Операция управляется этимкласс:
public class Manager {
private int count=0;
public synchronized void increment() throws InterruptedException {
if(count>=0){
count++;
}else {
wait();
notifyAll();
}
}
public synchronized void decrement()throws InterruptedException {
//wait();
if(count <10){
count--;
}else {
wait();
notifyAll();
}
}
public synchronized int getCount(){
return count;
}}
Это вывод, который я ожидаю:
-ThreadA: 1
-ThreadA: 2
-ThreadA: 3
.
.
-ThreadB: 10
-ThreadB: 9
-ThreadB: 8
.
.
-ThreadA: 1
-ThreadA: 2
-ThreadA: 3
.
.