网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
可签
7
级以上的吧
50
个
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
11月03日
漏签
0
天
java吧
关注:
1,225,065
贴子:
12,681,206
看贴
图片
吧主推荐
视频
游戏
11
回复贴,共
1
页
<返回java吧
>0< 加载中...
请问这种一边取 一边加的队列,怎么写多线程?
只看楼主
收藏
回复
AlphB__
淼淼淼
9
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
如图一,这个方法能按我期望,输出15。图二输出就是0了。
好像在第一个元素出队之后,while循环就退出了
送TA礼物
IP属地:上海
来自
Android客户端
1楼
2024-05-30 22:06
回复
AlphB__
淼淼淼
9
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
自学java,有很多不靠谱没学过的东西,希望大佬指点一下
IP属地:上海
来自
Android客户端
2楼
2024-05-30 22:06
回复
收起回复
深圳市优智创芯科技
共建·共享·开源!发现资源、发文:人工智能、类脑智能、
java
、算法、互联网、技术…来O站,玩转AGI,欢迎大家加入OpenSNN创作社区!招运营专员、销售等!
2024-11-03 00:52
广告
立即查看
AlphB__
淼淼淼
9
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
d
IP属地:上海
来自
Android客户端
3楼
2024-05-30 23:21
回复
收起回复
丶自由丨落体
淼淼沝
8
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
你创建的线程把队列里的5给poll出来后,还没执行到放入4这一步,主线程的while循环此时检查队列为空,就退出去了。
IP属地:江苏
来自
Android客户端
5楼
2024-05-31 01:15
回复
收起回复
datui3626
淼淼水
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
因为你没有等线程执行完
IP属地:四川
6楼
2024-05-31 01:21
回复
收起回复
丶自由丨落体
淼淼沝
8
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
一边取一边加的队列的多线程程序一般是用生产者消费者模式来写。
import java.util.concurrent.ConcurrentLinkedQueue;
public class ProducerConsumerPattern {
public static void producerConsumerSum(int n) {
ConcurrentLinkedQueue<Integer> queue = new ConcurrentLinkedQueue<>();
Thread producer = new Thread(() -> {
for (int i = n; i >= 1; i--) {
queue.add(i);
}
});
Thread consumer = new Thread(() -> {
int sum = 0;
while (!queue.isEmpty()) {
Integer num = queue.poll();
if (num != null) {
sum += num;
}
}
System.out.println("Sum: " + sum);
});
producer.start();
consumer.start();
try {
producer.join();
consumer.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
int n = 5;
producerConsumerSum(n);
}
}
IP属地:江苏
来自
Android客户端
7楼
2024-05-31 01:29
回复(1)
收起回复
845252276
水
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
看 Atomic 相关类
IP属地:重庆
来自
Android客户端
8楼
2024-05-31 07:27
回复
收起回复
丶自由丨落体
淼淼沝
8
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
之前的写法有bug,消费者还是会提前退出,导致输出可能为Sum: 0。这是修改过的。另外,这个目前只适用于单生产者单消费者的情况,如果要适配多生产者多消费者的模式需要进行相应的修改。
import java.util.concurrent.ConcurrentLinkedQueue;
public class Main {
private static final Integer END_MARKER = Integer.MIN_VALUE;
public static void producerConsumerSum(int n) {
ConcurrentLinkedQueue<Integer> queue = new ConcurrentLinkedQueue<>();
Thread producer = new Thread(() -> {
for (int i = n; i >= 1; i--) {
queue.add(i);
}
queue.add(END_MARKER); // 放入结束标记
});
Thread consumer = new Thread(() -> {
int sum = 0;
while (true) {
Integer num = queue.poll();
if (num != null) {
if (num.equals(END_MARKER)) {
break;
}
sum += num;
}
}
System.out.println("Sum: " + sum);
});
producer.start();
consumer.start();
try {
producer.join();
consumer.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
int n = 5;
producerConsumerSum(n);
}
}
IP属地:江苏
9楼
2024-05-31 09:20
回复
收起回复
广州快又稳网络科技
java
支持动态脚本+数据库,支持绑定独立域名。快又稳
java
,给梦想插上快又稳的翅膀。
2024-11-03 00:52
广告
立即查看
uhyhjgf
淼淼
6
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
生产者消费者模式,用阻塞队列啊
IP属地:陕西
来自
Android客户端
10楼
2024-05-31 14:45
回复
收起回复
中国辣条协会会长
淼淼水
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
转行吧
IP属地:北京
来自
Android客户端
12楼
2024-06-01 16:45
回复(1)
收起回复
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧热议榜
1
BLG对战T1
2958030
2
如果BLG夺冠,我就
2574359
3
三只羊已全额缴纳6894万罚款
2415056
4
如何评价S14开幕式不播?
1755351
5
郑钦文年终总决赛首秀
1563588
6
方便面吧守护互联网一片净土
1460525
7
S15决赛落地成都
1083792
8
Bin决赛要零封T1
766452
9
上海海港卫冕中超冠军
748396
10
拳头更新LOL全局BP赛制
667653
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示