¿Cómo activar el método de espera en el hilo?
Utilice ReentrantLock con múltiples condiciones para activar el subproceso especificado, asociar las condiciones de destino de activación con el subproceso, establecer una conexión y buscar la instancia del subproceso para encontrar las condiciones del objeto de monitoreo del subproceso.
clase pública NotifySpecfiedThread {
Mapa final estático privado < Hilo, Condición> notifyRelationship = nuevo ConcurrentHashMap< Hilo, Condición>();
Casillero ReentrantLock final estático privado = nuevo ReentrantLock (falso) ;
/**
?* @param args
?* @throws InterruptedException
?*/
public static void main(String[] args) lanza InterruptedException {
final int waitThreadNumber = 10;
for (int i = 1; i <= waitThreadNumber; i++) {
hilo final t = new WaitThreadTest();
notifyRelationship.put(t, locker.newCondition());
}
conjunto final< Hilo> subprocesos = notifyRelationship.keySet();
for (tema final t: subprocesos) {
t.start();
}
new NotifyThreadTest().join();
}
clase estática WaitThreadTest extiende Thread {
public WaitThreadTest() {
}
/**
?* Utilice diferentes condiciones para notificar el hilo especificado y utilice
?* Utilice la misma instancia de ReentrantLock p >
?*/
public void run() {
locker.lock();
prueba {
hilo final t = Thread.currentThread();
hilo final<.Boolean> isWait = new ThreadLocal
isWait.set(true);
while (isWait.get()) {
prueba {
System.out. println("Estoy listo para esperar",
+ "el nombre del hilo es:" + t.getName());
Condición final c = notifyRelationship.get(this);
await();
isWait.set(false);
} catch (InterruptedException ex) {
System.err.println(ex
.getMessage());
}
}
}
System.out.println("He sido liberado, hilo El nombre es: "
+ t.getName());
} finalmente {
locker.unlock();
}
}
}
/**
?* Recorre todas las instancias de condiciones y libera los hilos en espera.
?*/
clase estática NotifyThreadTest extiende el hilo {
public NotifyThreadTest() {
this.start(); p>
p>
}
public void run () {
final Set
.entrySet() ;
for (Entrada final<. Hilo, Condición> entrada: conjunto de entrada) {
Hilo final t = entrada.getKey();
Condición final c = entrada.unlock();
}
System.out.println("Ya he señalado el hilo especificado"
+ " :" + t. getName());
}
}
}
}
}