Descripción general del problema: Produzca uno, consuma uno y mantenga los hilos sincronizados
clase Mensaje {
título de cadena privada;
contenido de cadena privada;
bandera booleana privada = verdadero; // indica producción o consumo
// bandera = verdadero permite la producción, pero no permite el consumo
// bandera = falso permite el consumo no permite la producción
público conjunto vacío vacío ( Título de cadena, contenido de cadena) {
if (this.flag == false) {
try {
super.wait ();
} catch (InterruptedException e) {
// TODO Bloque de captura generado automáticamente
e.printStackTrace ();
}
}
this. title = title;
try {
Thread.sleep (100);
} catch (InterruptedException e) {
// TODO Bloque catch generado automáticamente
e.printStackTrace ();
}
this.content = contenido;
this.flag = false; // 已经 生产 完毕 了
super.notify (); // 唤醒 等待 的 线程
}
Cadena pública sincronizada get () {
if (flag == true) {
try {
super.wait ();
} catch (InterruptedException e) {
// TODO Bloque de captura generado automáticamente
e.printStackTrace ();
}
}
prueba {
Thread.sleep (100);
} catch (InterruptedException e) {
// TODO Bloque de captura generado automáticamente
e.printStackTrace ();
} try {
return this.title + "-" + this.content;
}finalmente {
this.flag = true;
super.notify ();
}
}
}
class Producer implementa Runnable {
mensaje privado msj;
Productor público (Mensaje msg) {
this.msg = msg;
} @Override
public void run () {
// TODO Código auxiliar de método generado automáticamente
para (int x = 0; x <100; x ++) {
if (x% 2 == 0) {
this.msg.set ("王健"," 宇宙 大 帅哥 ");
} else {
this.msg.set ("赵高", "第一 人");
}
}
}
}
class Consumer implementa Runnable {
mensaje privado msj;
Consumidor público (Mensaje msg) {
esto.
}
@Override
public void run () {
for (int x = 0; x <100; x ++) {
try {
Thread.sleep (10);
} catch (InterruptedException e) {
// TODO Bloque de captura generado automáticamente
e.printStackTrace ();
}
System.out.println (this.msg.get ());
}
}
}
public class Test1 {
public static void main (String [] args) lanza Exception {
Message msg = new Message ();
nuevo hilo (nuevo productor (mensaje)). inicio (); // 启动 生产者 线程
nuevo hilo (nuevo consumidor (mensaje)). inicio (); // 启动 消费者 线程
}
}