Jestem nowy w wielowątkowości i Podczas gdy czytam o wielowątkowości, myśli o napisaniu tego fantazyjnego kodu wielowątkowości, aby wykonać następujące czynności.Jak czekać z wątku1, aż do powiadomienia przez wątek2
Moja klasa licznika wygląda następująco.
class Counter {
private int c = 0;
public void increment() {
System.out.println("increment value: "+c);
c++;
}
public void decrement() {
c--;
System.out.println("decrement value: "+c);
}
public int value() {
return c;
}
}
Ten obiekt licznika jest dzielony między dwa wątki. Po rozpoczęciu wątków muszę wykonać następujące czynności. Chcę, aby wątek2 czekał, aż wątek1 zwiększy liczbę obiektów licznika o 1. Po wykonaniu tej czynności wątek 1 informuje wątek2, a następnie wątek1 rozpocznie oczekiwanie, aż wątek2 zmniejszy wartość o 1. Następnie wątek2 rozpocznie i zmniejszy wartość o 1 i ponownie informuje wątek1, a następnie wątek2 rozpoczyna oczekiwanie na wątek1. Powtórz ten proces kilka razy.
Jak mogę to osiągnąć. Z góry bardzo dziękuję.
Wykonałem następujące czynności.
public class ConcurrencyExample {
private static Counter counter;
private static DecrementCount t1;
private static IncrementCount t2;
public static void main(String[] args) {
Counter counter = new Counter();
Thread t1 = new Thread(new IncrementCount(counter));
t1.start();
Thread t2 = new Thread(new DecrementCount(counter));
t2.start();
}
}
public class DecrementCount implements Runnable {
private static Counter counter;
public DecrementCount(Counter counter) {
this.counter = counter;
}
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
counter.decrement();
System.out.println("decreamented");
}
}
}
public class IncrementCount implements Runnable {
private static Counter counter;
public IncrementCount(Counter counter) {
this.counter = counter;
}
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
counter.increment();
System.out.println("Incremented");
}
}
}
Zobacz CountDownLatch: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/CountDownLatch.html – davidmontoyago
'IncrementCount' powinien wywołać' increment() ', prawda? –
Najprostszym sposobem na to byłoby użycie jednego wątku. Proponuję rozważyć przykłady, w których używanie wielu wątków byłoby szybsze, a nie bardziej skomplikowane i wolniejsze. –