很简单啊,就用这个Vector作锁,A在V上wait,B收集到数据后调用V的notifyall即可。
解决方案 »
- 方法调用的疑问???
- java初学者
- 熟悉使用Eclipse编程环境的帮小弟回答下一个问题...!
- 如何保存JTextPanel中设置的字体样式
- java里表格的拖放问题?(急急急!)
- 大家提提意见,哪里还能在代码层面进行“防反编译”优化
- CLASSPATH,设置了直接使用JAVA能运行,但打成JAR包就报找不到所需要的类,WHY
- 纠正Java静态内部类的谣言
- 哪位大虾有jrun3.0的序列号,救命呀!
- 请问各位有谁知道招商银行的网上个人银行系统是用什么写的?????
- 终于写完了一个简单的计算器,但是有一个除数为零的异常问题,请各位指教
- java和.net哪个从各类型系统(比如说sap,notes……)中取数据并将数据转换成财务报表兼容性好一些?
public static void main(String[] args) {
Vector goods = new Vector();
Thread consumer = new Thread(new Consumer(goods));
Thread producer = new Thread(new Producer(goods));
consumer.start();
producer.start();
}
}class Consumer implements Runnable {
private Vector goods;
public Consumer(Vector goods) {
this.goods = goods;
}
public void run() {
synchronized(goods) {
while (true) {
try {
if (goods.size() == 0)
goods.wait();
System.out.println("Consumer: goods have been taken");
goods.clear();
goods.notify();
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}class Producer implements Runnable {
private Vector goods;
public Producer(Vector goods) {
this.goods = goods;
}
public void run() {
synchronized(goods) {
while (true) {
try {
if (goods.size() != 0)
goods.wait();
goods.add(new String("apples"));
goods.notify();
System.out.println("Producer: goods are ready");
Thread.sleep(500);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
main() {
Vector buf = new Vector();
Object pc = new Object();
A = new XXXX(buf,pc);
B = new YYYY(buf,pc);
A.start();
B.start();
}
class XXXX {
private Vector buf;
Object t;
public XXXX(Vector aa,Integer bb) { buf = aa; t = bb; }
public void run() {
while (true) {
synchronized (t) {
wait();
处理buf;
}
}
}
class YYYY {
private Vector buf;
Object t;
public YYYY(Vector aa,Integer bb) { buf = aa; t = bb; }
public void run() {
synchrionzed (t) {
添加buf;
notify();
}
}
}