Présentation du problème: en produire un, en consommer un et garder les threads synchronisés
Classe Message {
titre
de chaîne privé ; contenu de chaîne privé;
drapeau booléen privé = vrai; // indique la production ou la consommation
// drapeau = vrai autorise la production, mais n'autorise pas la consommation
// indicateur = faux autorise la consommation n'autorise pas la production
public void synchronized set ( Titre de chaîne, contenu de chaîne) {
if (this.flag == false) {
try {
super.wait ();
} catch (InterruptedException e) {
// TODO Bloc de capture généré automatiquement
e.printStackTrace ();
}
}
this. title = title;
try {
Thread.sleep (100);
} catch (InterruptedException e) {
// TODO Bloc de capture généré automatiquement
e.printStackTrace ();
}
this.content = content;
this.flag = false; // 已经 生产 完毕 了
super.notify (); // 唤醒 等待 的 线程
} chaîne
publique synchronisée get () {
if (flag == true) {
try {
super.wait ();
} catch (InterruptedException e) {
// TODO Bloc catch généré automatiquement
e.printStackTrace ();
}
}
essayez {
Thread.sleep (100);
} catch (InterruptedException e) {
// TODO Bloc catch généré automatiquement
e.printStackTrace ();
} essayez {
renvoyez this.title + "-" + this.content;
}enfin {
this.flag = true;
super.notify ();
}
}
}
class Producer implémente Runnable {
private Message msg;
producteur public (Message msg) {
this.msg = msg;
} @Override
public void run () {
// TODO Stub de méthode généré automatiquement
pour (int x = 0; x <100; x ++) {
if (x% 2 == 0) {
this.msg.set ("王健"," 宇宙 大 帅哥 ");
} else {
this.msg.set ("赵高", "第一 人");
}
}
}
}
class Consumer implémente Runnable {
private Message msg;
Consommateur public (Message msg) {
this.
}
@Override
public void run () {
for (int x = 0; x <100; x ++) {
try {
Thread.sleep (10);
} catch (InterruptedException e) {
// TODO Bloc catch généré automatiquement
e.printStackTrace ();
}
System.out.println (this.msg.get ());
}
}
}
classe publique Test1 {
public static void main (String [] args) lève Exception {
Message msg = new Message ();
nouveau fil (nouveau producteur (msg)). start (); // 启动 生产者 线程
nouveau fil (nouveau consommateur (msg)). start (); // 启动 消费者 线程
}
}