Topic: 请教线程间通信的问题 |
Print this page |
1.请教线程间通信的问题 | Copy to clipboard |
Posted by: Butterfly_125 Posted on: 2005-07-18 15:57 今天看了一下线程间通信的问题。有点不太清楚怎么用: /* *关于生产者和消费者问题 */ class Q { private String name = "袁平"; private String sex = "男"; boolean bFull = false; public synchronized void put(String name,String sex) { if(bFull) wait(); this.name = name; try { Thread.sleep(10); } catch(Exception e) { System.out.println(e.getMessage()); } this.sex = sex; bFull = true; notify(); //这个notify()应该唤醒get()中的wait()吧? } public synchronized void get() { if(!bFull) wait(); System.out.println(name + "----->" + sex); bFull = false; notify(); //这个notify()应该唤醒put()中的wait()吧? } } class Producer implements Runnable //生产者 { Q q = null; public Producer(Q q) { this.q = q; } public void run() { int i = 0; while(true) { if(i==0) q.put("袁平","男"); else q.put("王燕","女"); i=(i+1)%2; } } } class Consumer implements Runnable //消费者 { Q q = null; public Consumer(Q q) { this.q = q; } public void run() { while(true) { q.get(); } } } public class ThreadCommunation { public static void main(String [] args) { Q q = new Q(); new Thread(new Producer(q)).start(); new Thread(new Consumer(q)).start(); } } 其中,notify()是不是要标明要唤醒哪个方法中的wait()?wait() and notify()我还不太会用,能不 能通过这个例子给我讲一下?谢谢大家! |
2.Re:请教线程间通信的问题 [Re: Butterfly_125] | Copy to clipboard |
Posted by: dqgh0 Posted on: 2005-08-10 11:27 notify 是唤醒在等待序列中的第一个等待的线种,在这个程序里也就就是唤醒另一个线程,因为这里面就两个线程 没有notify(),wait( )就一直等下去 |
3.Re:请教线程间通信的问题 [Re: dqgh0] | Copy to clipboard |
Posted by: ranchgirl Posted on: 2005-08-10 12:55 dqgh0 wrote: 第一个等待的线程??? JLS did not say so!!! http://java.sun.com/docs/books/jls/third_edition/html/memory.html#17.8 |
4.Re:请教线程间通信的问题 [Re: Butterfly_125] | Copy to clipboard |
Posted by: simbas Posted on: 2005-08-13 21:33 notify 随机唤醒在等待序列中的一个线程 |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |