java进程间通信问题
下面是代码:
按理来说每个对应的num只有一句输出,但是结果却会出现下面这样的情况

有没有好心人能解答一下,我已经知道怎么能得到我想要的结果,只是单纯想知道这是为什么,谢谢。
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只有一句输出,但是结果却会出现下面这样的情况

有没有好心人能解答一下,我已经知道怎么能得到我想要的结果,只是单纯想知道这是为什么,谢谢。
...全文
相关推荐
Java基于socket的进程间通信 聊天小程序
**进程间通信(IPC)**: 在多进程系统中,进程间通信是指不同进程之间交换信息的方式。Java的Socket通信是进程间通信的一种,尤其是在网络环境中。4.
详谈java线程与线程、进程与进程间通信
**进程间通信**: - Java中,进程间通信不如线程间通信直接,通常需要借助文件、套接字(Socket)、数据库、管道等机制。
机器学习项目前(java)后端(python)进程通信问题
在进行机器学习项目时,尤其是在前后端技术栈分离的情况下,如Java负责前端界面,Python负责模型处理,如何确保高效的进程间通信成为一个关键问题。本文主要关注的是Java与Python之间的通信,以
android 进程间通信demo
注意事项 - 由于进程间通信涉及到安全问题,因此在调用服务时,需要确保客户端具有足够的权限。 - IPC可能导致性能开销,因此尽量减少不必要的跨进程通信。
AILD进程间通信Demo
在服务端,确保正确处理并发调用,防止数据竞争和同步问题。4. 客户端和服务端都需要处理可能的RemoteException,这是由于进程间通信可能失败导致的。


