• 主页
  • Java SE
  • J2ME
  • Web开发
  • Java EE
  • Eclipse
Little BigUs 湖南科技大学 04月29日
java进程间通信问题
下面是代码:



import java.util.ArrayList;
import java.util.List;

public class FirstThread {
public static void main(String[] args) throws InterruptedException {
List<Object> goods = new ArrayList<>(); //储存物品的仓库,最多储存1
Thread thread1 = new Thread(()->{ //线程1,生产产品
int num = 0;
while(true) {
synchronized (goods) {
if(goods.size()==0) goods.add("商品" + ++num);
else if(goods.size()>0)
try {
goods.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("生产者生产了第"+num+"个产品");

}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}, "生产者");
Thread thread2 = new Thread(()->{
int num = 0;
while(true) {
synchronized (goods) {
if(goods.size()>0) goods.remove("商品"+ ++num);
else if (goods.size()==0)
goods.notify();
System.out.println("消费者消费了第"+num+"个产品");

}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}, "消费者");
thread1.start();
thread2.start();
}
}

按理来说每个对应的num只有一句输出,但是结果却会出现下面这样的情况

有没有好心人能解答一下,我已经知道怎么能得到我想要的结果,只是单纯想知道这是为什么,谢谢。
...全文
330 点赞 收藏 1
写回复
1 条回复

还没有回复,快来抢沙发~

发动态
发帖子
Java
创建于2007-09-28

1.8w+

社区成员

8.1w+

社区内容

Java相关技术讨论
社区公告
暂无公告