问题来自Java技术沙龙的李博
Java线下沙龙报名链接:https://yq.aliyun.com/activity/796
1、这是Java多线程编程的问题,
2、wait是等待资源, 和 notify通知其他等待线程可以继续申请资源,继续执行。
3、模拟多线程订单生产者和消费者:
static class OrdersProducerThread extends Thread {
public void run() {
while (true) {
// 每隔 1000 毫秒生产一个商品
Thread.sleep(100);
synchronized (list) {
// 当前商品满了,生产者等待
while(list.size<100){
list.add(new Orders());
}
// 当100个订单,通知等待线程处理
list.notifyAll();
}
}
}
}
static class OrdersConsumerThread extends Thread {
public void run() {
while (true) {
Thread.sleep(200);
synchronized (list) {
// 当前商品空了,消费者等待
if (list.size() <= 0) {
list.wait();
}
list.remove(0);//删除一个订单,表示处理
// 通知生成线程也可以
list.notifyAll();
}
}
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。