标签:JAVA 消费者 title 生产者 private public Message message String
package thread;
class Message {
private String title;
private String content;
// true:允许生产,但是不允许消费; false:允许消费,不允许生产
private boolean flag = true;
public synchronized void set(String title, String content) {
if (!flag) {
try {
super.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.title = title;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.content = content;
flag = false; //已经生产过了
super.notify();
}
public synchronized String get() {
if (flag) { //还未生产,需要等待
try {
super.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
return this.title + " - " + this.content;
} finally {
flag = true; //继续生产
super.notify(); //唤醒等待线程
}
}
}
class Producer implements Runnable {
private Message message;
public Producer(Message message) {
this.message = message;
}
@Override
public void run() {
for (int k = 0; k < 100; k++) {
if (k % 2 == 0) {
this.message.set("Gavin", "云龙第一帅");
} else {
this.message.set("小强", "猥琐第一人");
}
}
}
}
class Comsunmer implements Runnable {
private Message message;
public Comsunmer(Message message) {
this.message = message;
}
@Override
public void run() {
for (int k = 0; k < 100; k++) {
System.out.println(this.message.get());
}
}
}
public class ThreadDemo {
public static void main(String[] args) {
Message message = new Message();
new Thread(new Producer(message)).start();
new Thread(new Comsunmer(message)).start();
}
}
标签:JAVA,消费者,title,生产者,private,public,Message,message,String 来源: https://www.cnblogs.com/gavinXian/p/16216363.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。