- 56
- 0
多线程生产者与消费者模型
生产者与消费者模型,通过Object的wait()以及notifyAll()方法实现以及同步方法实现
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
class Resource {
private int num = 0;
private boolean flag = true;
// flag为true可以执行加法操作,不可以执行减法操作
// flag为false可以执行减法操作,不可以执行加法操作
public synchronized void add() throws Exception {
if(!this.flag) { // flag为false只能执行减法操作
super.wait(); // 需要等待
}
//Thread.sleep(100);
this.num++;
System.out.println(Thread.currentThread().getName() + "运行, num = " + this.num);
this.flag = false; // 可以进行减法操作
super.notifyAll(); // 唤醒其他线程
}
public synchronized void sub() throws Exception {
if(this.flag) { // flag为true只能进行加法操作,减法操作需要等待
super.wait();
}
// Thread.sleep(100);
this.num--;
System.out.println(Thread.currentThread().getName() + "运行, num = " + this.num);
this.flag = true ; // 可以进行加法操作
super.notifyAll(); // 唤醒其他线程
}
}
class AddThread implements Runnable {
private Resource res;
public AddThread(Resource res) {
this.res = res;
}
@Override
public void run() {
for (int i = 0 ; i < 50 ; i++) {
try {
this.res.add();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
class SubThread implements Runnable {
private Resource res;
public SubThread(Resource res) {
this.res = res;
}
@Override
public void run() {
for (int i = 0 ; i < 50 ; i++) {
try {
this.res.sub();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public class ThreadDemo {
public static void main(String[] args) {
Resource res = new Resource();
AddThread at = new AddThread(res);
SubThread st = new SubThread(res);
new Thread(at, "加法操作-1").start();
new Thread(at, "加法操作-2").start();
new Thread(st, "减法操作-1").start();
new Thread(st, "减法操作-2").start();
}
}
我期待他加完只能减,减完只能加.而现在输出的不对,他会小于0
1
打赏
收藏
点击回答
您的回答被采纳后将获得:提问者悬赏的 11 元积分
- 共 0 条
- 全部回答
-
快手名字大全英文名 普通会员 1楼
多线程生产者与消费者模型是一种常见的多线程编程模型,主要用于处理并消费大量的数据。这种模型的主要思想是将任务分解为多个线程进行处理,每个线程负责处理一部分数据,然后将处理结果推送给消费者。
以下是多线程生产者与消费者模型的基本步骤:
-
创建生产者线程:生产者线程负责从数据库或其他数据源中获取数据,并将其转化为需要的格式。生产者线程需要保证数据的实时性,因此需要使用线程池或其他线程调度工具。
-
创建消费者线程:消费者线程负责接收生产者线程传来的数据,并将其转化为需要的格式。消费者线程需要保证数据的实时性,因此需要使用线程池或其他线程调度工具。
-
消费者线程接收生产者线程传来的数据:生产者线程会在适当的时间发送数据给消费者线程。
-
消费者线程处理数据:消费者线程需要对处理后的数据进行适当的处理,例如格式化、分析等。
-
消费者线程将处理后的数据推送给消费者:消费者线程将处理后的数据推送给其他消费者,或者将处理后的数据保存到数据库或其他数据源中。
-
线程池或其他线程调度工具负责线程的调度:线程池或其他线程调度工具负责选择合适的线程进行任务的执行,确保任务的执行效率和线程的效率。
以上就是多线程生产者与消费者模型的基本步骤。这种模型可以处理大量的数据,但是需要保证线程的执行效率和线程的并发性。
-
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

