来会会大厂java多线程面试题(一)

 最近学了很多线程方面的知识,如果不实践一下很快就会忘了,所以就去找了两道大厂的面试题,今天先做了一道,明天再更一道,哈哈。

 题目是这样的:

实现一个容器,提供两个方法,add,size。写两个线程,线程1往容器里添加10个元素,线程2实现监控元素的个数,当个数到5时,线程2给出提示并结束

 其实这个题目并不难,首先分析题目,实现一个容器和两个方法,这里我们容器就用list,然后一个写一个读,我们要做到是他在写的过程中可以让读的线程知道写进去几个数据了,那么重点是什么,没错就是数据一致性,这是做这道题的重点,然后就是如何让读线程知道容器里已经添加了5个元素了,这个就要大家来思考一下了。好了闲话少说,直接上代码,我写了四个demo,当然第一个是有问题的,一起来看看吧

几个demo中t1 为添加元素的线程,t2为监控元素数量的线程。这里的容器我都用了同步集合Collections.synchronizedList(new LinkedList<>()),用volatile来修饰 是因为他的可见性。注意,几个demo都要让t2先启动,不然还是会出现问题。

第一个demo中,t2线程里面我写了一个while循环去不停的调用size方法,如果返回5就跳出循环 结束任务,t1线程则是写了个循环添加10个元素,图中我写了注释,是因为会出现t2在读完数据到下次读取数据期间,t1添加了5,并且添加了6或者更多,这时t2读取的数据跳过5,就变成死循环了。所以这个demo不是一个完美的答案。

第二个demo中,这里太长了没有截全,上面的代码和第一个demo是一样的。我在t1,t2里都加了锁,这个是利用了wait和notify,到5的时候让t1去叫醒t2,然后t1 wait ,t2 获取锁继续执行,执行完了之后叫醒t1,t1获取锁再继续执行。这里等于没有再让t2去监控容器,而是让t1去告诉t2我已经添加了5个元素了,这样就不会出现数据不一致的问题了。后面两个demo的思路也是这样的,只是用的类不一样而已

第三个demo中,利用countDownLatch的特性,t2 先执行,然后await。t1每次添加元素的时候countDown一次,5次的时候t2就开始执行了,t1再await,然后等t2执行结束,t2 countDown,t1 继续执行直到结束。

第四个demo中,这里利用了LockSupport可以阻塞线程的特点,t2先执行,然后park阻塞,t1开始添加元素,到5个后,t1 unpark(t2)让t2 继续执行,同时t1 park阻塞,t2执行完之后,t2 unpark(t1)让t1继续执行直到结束。

大家有更好的思路的话可以评论区留言大家一起讨论一下


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342