首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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-09 13:51
门头沟学院 Java
秋招这就要开始了吗
还处在暑期实习上岸后的摆烂状态实习:杂活多,产出少,文档也没偷学多少八股:忘的差不多了项目:有实习就不会问玩具项目了吧力扣:我可以说我连hot 100都没刷完吗国企:从零开始准备论文:没着落
回收旧报纸:
世另我,只是我比你更烂一些,没找到实习,你起码还有实习的,秋招猛猛冲,加油
点赞
评论
收藏
分享
昨天 10:51
门头沟学院 Java
现在找工作都癫成这样了吗
也算是在找工作的途中带来一丝乐趣的
点赞
评论
收藏
分享
06-14 19:09
门头沟学院 Java
能去这种小厂实习吗?
mes,erp,crm是什么意思,不太懂
darius_:
给制造业搞的,什么物料管理生产管理,设备管理点检,最最关键的就是一堆报表看板。个人觉得没啥技术含量都是些基本的crud,但是业务很繁琐那种
点赞
评论
收藏
分享
06-14 14:21
成都东软学院 人工智能
求锐评,求拷打
普通二本人智找不到实习😢
废物一个0offer:
认真的吗二本本科找人工智能岗位
点赞
评论
收藏
分享
07-08 09:51
中国地质大学 Java
腾讯的面试,拷问的太全面了
今天分享的是腾讯校招的一面面经,大厂拷问的知识点都很广泛,如果你也准备冲击大厂,一定要做足了准备,语言基础、数据库、缓存、消息队列、操作系统、计算机网络、算法、项目等等,基本上都会问到而且会问的很全很细,而且去大厂面试,要是没通过的话还会有记录,后面还想再去面就难咯。1. 请简单做一个自我介绍这个问题以及最后一个问题我昨天也提到了,想知道回答思路的可以移步这篇文章。2. Go 语言里怎样处理哈希冲突?在 Go 语言中,哈希冲突的处理采用的是链地址法,也被叫做拉链法。其具体做法是,当多个键值对通过哈希函数计算后,得到相同的哈希值,这些键值对会被存储在同一个哈希桶里,而每个哈希桶都连着一个链表或者...
腾讯一面2167人在聊
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
四段实习终大厂 如此牺牲为哪般
2.5W
2
...
双非二本靠一张嘴拿下美团
1.3W
3
...
小红书二面(第二天oc)
6014
4
...
突然对上流社会祛魅了
5930
5
...
记录一下0实习三天速通字节了....
3563
6
...
儿时记忆在梦中闪回,一觉醒来继续做“大人”
3212
7
...
秋招这就要开始了吗
2878
8
...
大疆测评流程分享
2700
9
...
作为hr,已被求职者整疯
2381
10
...
死喽,面试前因为网名被HR制裁咯
2323
创作者周榜
更多
正在热议
更多
#
你认为小厂实习有用吗?
#
13890次浏览
186人参与
#
面试官是我前女友
#
106996次浏览
731人参与
#
实习生的蛐蛐区
#
40243次浏览
329人参与
#
当你面对裁员会如何?
#
275949次浏览
2438人参与
#
计算机有哪些岗位值得去?
#
12920次浏览
134人参与
#
lastday知无不言
#
56878次浏览
460人参与
#
在职场上,你最讨厌什么样的同事
#
14458次浏览
150人参与
#
推荐一首陪你工作的歌吧
#
14014次浏览
97人参与
#
说说你知道的学历厂
#
28307次浏览
178人参与
#
你找工作的时候用AI吗?
#
14894次浏览
193人参与
#
下班后的时间你怎么安排
#
7478次浏览
111人参与
#
哪一瞬间觉得自己长大了
#
7257次浏览
166人参与
#
携程求职进展汇总
#
559430次浏览
4258人参与
#
面试尴尬现场
#
23881次浏览
164人参与
#
工作后会跟朋友渐行渐远吗
#
30042次浏览
216人参与
#
中核求职进展汇总
#
20140次浏览
152人参与
#
社会教会你的第一课
#
29389次浏览
396人参与
#
多益网络工作体验
#
49640次浏览
280人参与
#
虾皮求职进展汇总
#
244179次浏览
1797人参与
#
神州信息工作体验
#
16014次浏览
75人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务