首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
去哪招聘
2017-07-27 16:30
已编辑
哈尔滨理工大学 Java
关注
已关注
取消关注
线程笔试题java 跪求代码思路
一个线程A以随机的间隔[0-20ms]产生k个随机数到一块内存区a (k也是随机生成的[100-200])。线程B,C每次以随机的时间间隔[0-50ms]获取内存区a的数据。B,C将获取的数据X,生成X+1。 并将X,X+1这两个数分别以随机的时间间隔[0-100ms]放入到内存区b. 线程D获取内存区b的数据并打印出来。D线程打印的数据中X与X+1必须在一起打印。当D线程打印出最后一个数字后。 输出一下打印的个数,并退出整个程序。
提示
全部评论
推荐
最新
楼层
牛客1401071号
电子科技大学 Java
不知道符不符合你的要求 public class Test { public static void main(String[] args){ BlockingQueue<Integer> que1 = new LinkedBlockingQueue<>(); BlockingQueue<MyNumber> que2 = new LinkedBlockingQueue<>(); ProducerTask A =new ProducerTask(que1); ConsumerIntegerProduceMyNumber B =new ConsumerIntegerProduceMyNumber(que1,que2); ConsumerIntegerProduceMyNumber C =new ConsumerIntegerProduceMyNumber(que1,que2); ProduceMyNumber D = new ProduceMyNumber(que2); ExecutorService executor = Executors.newFixedThreadPool(4); executor.execute(A); executor.execute(B); executor.execute(C); executor.execute(D); executor.shutdown(); try { executor.awaitTermination(Long.MAX_VALUE,TimeUnit.HOURS); } catch (InterruptedException e) { e.printStackTrace(); } } } class MyNumber{ public Integer num; public boolean isBig; public MyNumber(Integer num,boolean isBig){ this.num = num; this.isBig = isBig; } } class ProducerTask implements Runnable{ private BlockingQueue<Integer> que1; public ProducerTask(BlockingQueue<Integer> que1){ this.que1 = que1; }
@Override
public void run() { Random r =new Random(); int k = r.nextInt(100)+100; System.out.println(k); while(k-->0){ int time =r.nextInt(20); try { Thread.sleep(time); que1.put(r.nextInt(Integer.MAX_VALUE)); } catch (InterruptedException e) { e.printStackTrace(); } } try { que1.put(-1); que1.put(-1); } catch (InterruptedException e) { e.printStackTrace(); } } } class ConsumerIntegerProduceMyNumber implements Runnable{ private BlockingQueue<Integer> que1; private BlockingQueue<MyNumber> que2; public ConsumerIntegerProduceMyNumber(BlockingQueue<Integer> que1, BlockingQueue<MyNumber> que2) { this.que1=que1; this.que2 =que2; }
@Override
public void run() { int x=0 ; Random r =new Random(); while(x>=0){ int time =r.nextInt(50); try { Thread.sleep(time); x=que1.take(); if(x<0)break; int putTime1=r.nextInt(100); int putTime2 =r.nextInt(100); if(putTime1>putTime2){ Thread.sleep(putTime2); que2.put(new MyNumber(x+1,true)); Thread.sleep(putTime1-putTime2); que2.put(new MyNumber(x,false)); } else if(putTime1<putTime2){ Thread.sleep(putTime1); que2.put(new MyNumber(x,false)); Thread.sleep(putTime2-putTime1); que2.put(new MyNumber(x+1,true)); } else{ Thread.sleep(putTime1); que2.put(new MyNumber(x,false)); que2.put(new MyNumber(x+1,true)); } } catch (InterruptedException e) { e.printStackTrace(); } } try { que2.put(new MyNumber(-1,false)); } catch (InterruptedException e) { e.printStackTrace(); } } } class ProduceMyNumber implements Runnable{ private BlockingQueue<MyNumber> que2; public ProduceMyNumber(BlockingQueue<MyNumber> que2) { this.que2 = que2; }
@Override
public void run() { MyNumber num =new MyNumber(0,false); Set<Integer> set = new HashSet<>(); int count=0; int nThread=2; while(nThread>0){ try { num = que2.take(); if(num.num<0){ nThread--; continue; } if(num.isBig){ if(set.contains(num.num-1)){ System.out.println(num.num-1); System.out.println(num.num); count+=2; } else set.add(num.num); } else{ if(set.contains(num.num+1)){ System.out.println(num.num); System.out.println(num.num+1); count+=2; } else set.add(num.num); } } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("总计:"+count); } }
点赞
回复
分享
发布于 2017-08-01 17:12
暂无评论,快来抢首评~
相关推荐
07-07 17:04
天津理工大学 golang
字节拒绝、百度毁约,7.1 腾讯 Offer 到手:25 届双非碎碎念(25届最晚Offer)
本以为收到腾讯🐧 Offer 的那一刻会很平静,可还是忍不住对自己说一句真棒。依旧感谢身边那些一直支持和给我泼冷水的人,让这一切美好在 7.1 如 “七” 而至。这一段路程,对于一个双非本科、挤爆了的后端、被字节拒绝十几次、临入职百度极限毁约的我来说,也是非常坎坷了。可也确实平静了许多,没有第一次、第二次.... 收到大厂 offer 的那般激动了。因为我知道,面试找工作这事充满了太多不确定性了,成与不成都是好样的。也知道即使失败了 100 次,我还是会重新整理自己,尝试第 101 次。更知道,只要不停止奔跑,哪怕是走在路上,总有一次是属于我的机会,不过确实可能会来得晚一些。就像我这次在毕业...
MAODO:
mark祝福
点赞
评论
收藏
分享
07-10 11:08
门头沟学院 Java
京东面试通过啦!
投递京东等公司9个岗位
点赞
评论
收藏
分享
05-15 19:57
西安建筑科技大学 Java
ssob上遇到的逆天
我搜了下,春风好像是fjb?这人是脑子有问题吗?上来就恶心人
那一天的Java_J...:
他本来公司就是做这个的,不就是正常的游戏客户端和服务器开发,软硬件联动,有啥恶心不恶心的,提前告诉你就是怕你接受不了,接受不了就没必要再往后走流程浪费时间,虽然这公司是一坨。
点赞
评论
收藏
分享
06-21 17:53
华南师范大学 Java
26届找暑期实习,求大佬们指点
从3月份开始投,各种厂都试过了,要么面试没通过要么挂,没收到一份offer马上就要暑假了,求大佬们指点指点😭😭😭
BlitzIron:
校园经历去了
点赞
评论
收藏
分享
07-09 12:12
门头沟学院 Java
26届普联提前批开奖
5月底投简历7月初开奖收获秋招第一个offer,虽然白菜价,但至少能保底了
TP-LINK开奖132人在聊
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
四段实习终大厂 如此牺牲为哪般
2.5W
2
...
双非二本靠一张嘴拿下美团
1.3W
3
...
小红书二面(第二天oc)
6542
4
...
突然对上流社会祛魅了
6100
5
...
儿时记忆在梦中闪回,一觉醒来继续做“大人”
3513
6
...
大疆测评流程分享
3168
7
...
秋招这就要开始了吗
2874
8
...
OMG,超雄hr
2543
9
...
我的leader一直问我有没有对象
2494
10
...
作为hr,已被求职者整疯
2413
创作者周榜
更多
正在热议
更多
#
你认为小厂实习有用吗?
#
14015次浏览
186人参与
#
面试官是我前女友
#
107051次浏览
731人参与
#
实习生的蛐蛐区
#
40522次浏览
329人参与
#
当你面对裁员会如何?
#
275981次浏览
2438人参与
#
计算机有哪些岗位值得去?
#
13034次浏览
134人参与
#
lastday知无不言
#
56915次浏览
460人参与
#
在职场上,你最讨厌什么样的同事
#
14506次浏览
150人参与
#
推荐一首陪你工作的歌吧
#
14033次浏览
97人参与
#
说说你知道的学历厂
#
28445次浏览
178人参与
#
你找工作的时候用AI吗?
#
14998次浏览
193人参与
#
下班后的时间你怎么安排
#
7535次浏览
111人参与
#
哪一瞬间觉得自己长大了
#
7300次浏览
167人参与
#
携程求职进展汇总
#
559477次浏览
4258人参与
#
面试尴尬现场
#
24064次浏览
164人参与
#
工作后会跟朋友渐行渐远吗
#
30077次浏览
216人参与
#
中核求职进展汇总
#
20165次浏览
152人参与
#
社会教会你的第一课
#
29534次浏览
396人参与
#
多益网络工作体验
#
49690次浏览
280人参与
#
虾皮求职进展汇总
#
244210次浏览
1797人参与
#
神州信息工作体验
#
16060次浏览
75人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务