Soy nuevo en multi-threading y mientras leo sobre multi-threading, pensé en escribir este código de multi-threading para hacer lo siguiente.Cómo esperar desde thread1 hasta que se lo notifique por thread2
Mi clase de contador es la siguiente.
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;
}
}
Este objeto de contador se comparte entre dos hilos. Una vez que se inician los hilos, necesito hacer lo siguiente. Quiero que Thread2 espere hasta que Thread1 incremente el conteo del objeto Counter en 1. Una vez hecho esto, Then Thread 1 informa thread2 y luego Thread1 comienza a esperar que thread2 disminuya el valor en 1. Entonces thread2 inicia y disminuye el valor por 1 e informa thread1 nuevamente y luego thread2 comienza a esperar thread1. Repita este proceso por algunas veces.
¿Cómo puedo lograr esto. Muchas gracias de antemano.
He hecho lo siguiente.
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");
}
}
}
Consulte CountDownLatch: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/CountDownLatch.html – davidmontoyago
'IncrementCount' debe llamar a 'increment()', ¿no? –
La forma más sencilla de hacer esto sería usar un hilo. Sugiero que considere ejemplos en los que el uso de varios hilos sea más rápido, en lugar de más complicado y más lento. –