哪位帮我看下线程问题,为什么运行不出结果的呢

java实例备份 2013-12-12 03:12:50
代码都在这儿了,复制运行到Threads包中,运行下就OK了,多谢谢了.



Drop类:


package Threads;
public class Drop {
// Message sent from producer to consumer.
private String message;
// True if consumer should wait for producer to send message
// false if producer should wait for consumer
// to retrieve message.
private boolean empty = true;
public synchronized String take() {
// Wait until message is available.
while (empty) {
try {
wait();
} catch (InterruptedException e) {
}
}
// Toggle status.
empty = true;
// Notify producer that status has changed.
notifyAll();
return message;
}
public synchronized void put(String message){
//wait until message has been retrieved.
while(!empty){
try{
wait();
}catch(InterruptedException e){

}
//Toggle staus.
empty=false;
//store message.
this.message=message;
//Notify consumer that status has changed.
notifyAll();
}
}
}



Producer类:

package Threads;
import java.util.Random;
public class Producer implements Runnable {
private Drop drop;


public Producer(Drop drop) {
this.drop = drop;
}
public void run(){
String importantInfo[]={
"Mares eat oats",
"Does eat oats",
"Little lambs eat ivy",
"A kid will eat ivy too"
};
Random random=new Random();
for(int i=0;i<importantInfo.length;i++){
drop.put(importantInfo[i]);
try{
Thread.sleep(random.nextInt(5000));

}catch(InterruptedException e){

}
}
drop.put("DONE");

}
}





Consumer类:



package Threads;


import java.util.Random;


public class Consumer implements Runnable {
private Drop drop;


public Consumer(Drop drop) {
this.drop = drop;
}


@Override
public void run() {
// TODO Auto-generated method stub
Random random=new Random();
for(String message=drop.take();!message.equals("DONE");message=drop.take()){
System.out.format("MESSAGE RECEIVED:%s%n",message);
try{
Thread.sleep(random.nextInt(5000));
}catch(InterruptedException exception){

}
}
}


}



ProducerConsumerExample主线程类:

package Threads;


public class ProducerConsumerExample {


public static void main(String[] args) {
// TODO Auto-generated method stub
Drop drop=new Drop();
(new Thread(new Producer(drop))).start();
(new Thread(new Consumer(drop))).start();
}


}
...全文
115 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
java实例备份 2013-12-13
  • 打赏
  • 举报
回复
引用 4 楼 xinggg 的回复:
括号错了 public synchronized void put(String message) { // wait until message has been retrieved. while (!empty) { try { wait(); } catch (InterruptedException e) { } }//***这个括号你到下面去了 // Toggle staus. empty = false; // store message. this.message = message; // Notify consumer that status has changed. notifyAll(); }
确实如此,还是没分析清,多谢,结贴!
搬运工木木 2013-12-12
  • 打赏
  • 举报
回复
	public synchronized void put(String message) {
		// wait until message has been retrieved.
		while (!empty) {
			try {
				wait();
			} catch (InterruptedException e) {

			}
		}
			// Toggle staus.
			empty = false;
			// store message.
			this.message = message;
			// Notify consumer that status has changed.
			notifyAll();
		
	}
搬运工木木 2013-12-12
  • 打赏
  • 举报
回复
括号错了 public synchronized void put(String message) { // wait until message has been retrieved. while (!empty) { try { wait(); } catch (InterruptedException e) { } }//***这个括号你到下面去了 // Toggle staus. empty = false; // store message. this.message = message; // Notify consumer that status has changed. notifyAll(); }
骑士的崛起 2013-12-12
  • 打赏
  • 举报
回复
这代码没法看,代码写挺整洁的,读着太累,直接说功能给你写个多线程得了。
java实例备份 2013-12-12
  • 打赏
  • 举报
回复
是的,空白的,每次都这样
搬运工木木 2013-12-12
  • 打赏
  • 举报
回复
每次都不出结果么?

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧