当前位置: 首页 > 科技观察

鹿鼎记·韦小宝,结合电视剧剧情讲解java多线程

时间:2023-03-20 17:33:37 科技观察

1.前言学习路径决定学习效果!有时候很多看似复杂的知识其实并没有那么复杂,而是你查到的信息让知识变得复杂了。你为什么这么说?学习知识可以想象成一个从头到尾吸收知识的过程。在这个过程中,会有一些知识路径行走的经验。然后不同的资料带你走这个知识路径,但是有些资料容易走弯路或者很难走(路也和车有关,有的路适合小客车,有的路适合小车)。而且当你找到一个很好很合适的材料的时候,你会有一种顺滑通透的感觉,不会觉得学起来太复杂。同时,你不仅学到了,而且理解了核心要义。这些信息掌握在你手中,开快一点,系好安全带,所以找到最好的信息也是学习过程中很重要的一个点。你的搜索能力越好,你就越容易找到最适合你的材料。接下来福哥就带大家走进鹿鼎记·韦小宝的多线程与锁的故事路线,体验搞笑B学习路线!2.韦小宝与多线程图12-1鹿鼎记·韦小宝,多线程恶搞范例傅大哥选取了鹿鼎记的五个场景,整合成不同的多线程用途,包括:离春园,讲故事、天地会、香主、招臣、进宫、皇帝、建宁、比武、七妻、隐居,这五个场景。相信看完之后,你一定会记住每一个线程的使用!1.讲故事的李春元publicclassSynchronizedTest{privatestaticExecutorService李春元=Executors.newFixedThreadPool(10);privatestaticvolatilebooleanmadam=false;publicstaticclassguestofficerimplementsRunnable{privateStringname;publicguestofficer(StringName){this.Name=Name;}@Overridepublicvoidrun(){try{Clear(Name);}catch(InterruptedExceptione){e.printStackTrace();}}}publicstaticsynchronizedvoidClear(StringName)throwsInterruptedException{while(true){System.out.println("魏春华和"+name+"饮茶吟诗行正谈情!");if(oldbustard){System.out.println("大鸨敲门:时间到了!\r\n");大鸨=false;休息;}Thread.sleep(1000);}}privatestaticListlist=Arrays.asList("敖师傅","陈近南","海大富");公共静态无效主要(String[]args)throwsInterruptedException{for(inti=0;i<3;i++){Lichunyuan.execute(newguestofficer(list.get(i)));线程.睡眠(3000);=真;}}}场景:韦小宝在离春园讲杂七杂八的时候,一些大佬(敖大人,陈近南,海大夫)经常会来唱诗,是对的,和庆侯聊聊天,但是因为大家欣赏有一个小伙子魏春华,需要排队。知识:使用synchronized锁,volatile可见性,不断实例化guestoffers加入线程池,等着和Qingguan聊天。您还可以使用wait()和notify()来实现此效果。过程测试结果:魏春华陪敖先生喝茶、吟诗、做对、谈情说爱!魏春华喝茶,吟诗,做爱,和敖大人聊天!魏春华喝茶,吟诗,做爱,和敖大人聊天!魏春华喝茶,吟诗,做爱,和敖大人聊天!大鸨敲门:是时候了!魏春华和陈近南喝茶、吟诗、做爱、谈情说爱!魏春华和陈近南喝茶、吟诗、做爱、谈情说爱!魏春华和陈近南喝茶、吟诗、做爱、谈情说爱!魏春华和陈近南喝茶、吟诗、做爱、谈情说爱!大鸨敲门:是时候了!魏春华和海大富喝茶,吟诗,做爱,谈情说爱!魏春华和海大富喝茶,吟诗,做爱,谈情说爱!魏春华和海大富喝茶,吟诗,做爱,谈情说爱!魏春华和海大富喝茶,吟诗,做爱,谈情说爱!大鸨敲门:是时候了!2.天地会、香竹图12-3天地会、香竹publicclassCountDownLatchTest{publicstaticvoidmain(String[]args)throwsInterruptedException{Listlist=Arrays.asList("总舵,陈今南","莲花堂香师蔡德忠、“弘顺堂香师方大洪”、“嘉侯堂香师马朝兴”、“神台堂香师胡德弟”、“弘化堂香师李世凯”、“香道青木殿香祖韦小宝、赤火殿香祖上古中年、玄水殿香祖林永超、黄土堂香祖姚必达;CountDownLatchlatch=newCountDownLatch(10);ExecutorServiceexec=Executors.newFixedThreadPool(10);对于(inti=0;i<10;i++){intidx=i;exec.execute(()->{try{System.out.println("天地会核心十大核心成员,高层会议,成员:"+list.get(idx)+"入场");线程.睡眠(3000);}catch(忽略异常){}finally{latch.countDown();}});}latch.await();System.out.println("天地会,核心成员齐聚一堂,商议谁入宫盗四十二章!默认卫香主"");exec.shutdown();}}场景:韦小宝在立春园救下陈近南后,加入天地会,成为青木殿的韦香主。与洪顺堂、嘉厚堂、神太堂、洪化堂、赤火堂、玄水堂、黄土堂等九大香炉齐名。这些也是天地会的核心成员,他们经常定期聚会。这不,他们开会商量谁进宫盗取四十二回,其实韦香珠·韦小宝早有定论。知识点:CountDownLatch门闩效果,当达到一定人数满意时,航行,挥动锤子,过山车。那么会议的效果也是利用这个锁来实现的。遇到10个人后,关上门开始。测试结果:天地会十大核心殿堂高层会议核心成员,成员:总舵,陈近南进入天地会十大核心殿堂高层会议核心成员,成员:香珠莲花堂,蔡德忠进入天地会核心十堂核心成员高层会议成员:洪顺堂祥柱、方大洪进入天地会核心十堂核心成员高层会议成员:贾厚堂祥柱、马超兴进入天地会核心十堂核心成员,高层会议,成员:善太堂香法师,胡德第接纳天地会核心十位核心成员,高层会议,成员:红花堂香珠,李世凯接纳天地会核心十位核心成员,高层会议、成员:青木堂香法师、韦小宝进入天地会核心十大核心殿堂、高层会议、成员:赤火堂香法师、顾志忠进入天地会核心十大核心成员、高层会议ng、成员:玄水堂香主、林永超进入天地会核心十大核心成员,高层会议,成员:黄土堂香主、姚必达进入天地会,核心成员全部到场。开会商议谁入宫盗取四十二章!《普通魏相助》3.招杂役,进宫图12-4招杂役,进宫publicclassReentrantLockTest{privatestaticReentrantLocklock=newReentrantLock(true);privatestaticListlist=Arrays.asList("路人A","路人B","路人C","路人D","路人E","路人姬","路人耿","路人任》、《路人桂》、《韦小宝》);publicstaticvoidmain(String[]args){for(inti=0;i<10;i++){intidx=i;newThread(()->{try{recruithandyman(list.get(idx));}catch(InterruptedExceptionignore){}}).start();if(idx==9){newThread(()->{招募太监(list.get(idx));}).start();}}}publicstaticvoidRecruitservants(Stringname)throwsInterruptedException{lock.lock();try{while(true){System.out.println(name+",排队等候入宫为奴..");线。睡眠(1000);}}最后{lock.unlock();}}publicstaticvoidrecruit太监(Stringname){System.out.println(name+",入宫为太监,无需排队!");}}场景:被困小宝被选为宫人选之后,来到了杂工招募的地方。看到队伍排得很长,他灵机一动,跑到一边去了。这里没有人排队!立马冲了进去。我们在案例中使用公平锁队列来反映这种场景。知识点:ReentrantLock,公平锁排队,需要在代码中显示的锁的打开和关闭。测试结果:路人A,排队入宫当杂役……韦小宝,当太监入宫,不用排队!行人甲,排队入宫做杂工……行人甲,排队入宫当杂工……行人甲,排队入宫当杂工……行人甲,排队以勤杂工的身份进宫。..路人A,排队等候入宫当杂工...4.建宁皇帝争霸图12-5建宁皇帝争霸publicclassReentrantReadWriteLockTest{privatestaticfinalReentrantReadWriteLockreadWriteLock=newReentrantReadWriteLock();privatestaticfinalLockreadLock=readWriteLock.readLock();privatestaticfinalLockwriteLock=readWriteLock.writeLock();privatestaticDequedeque=newArrayDeque<>();publicstaticStringget(){readLock.lock();尝试{returndeque.poll();}最后{readLock.unlock();}}publicstaticvoidput(Stringvalue){writeLock.lock();尝试{deque.add(value);}最后{writeLock.unlock();}}publicstaticvoidmain(String[]args){newThread(()->{while(true){put("小捕获");put("抓住奈龙的手");put("脚踏实地");put("大别子");put("锁住喉咙");put("纽扣眼珠");尝试{Thread.sleep(3000);}catch(InterruptedExceptionignore){}}}).start();newThread(()->{while(true){System.out.println("韦小宝与皇帝比武:"+get());try{Thread.sleep(500);}catch(InterruptedExceptionignore){}}})。开始();小心被建宁公主发现,才会出现这样的打斗场面。小宝不会武功,天天学武。因此,我们这里使用读写锁来模拟。写锁相当于传授知识,读锁相当于使用知识:ReentrantReadWriteLock关于读写锁的使用。测试结果:韦小宝比武帝一招:小擒拿韦小宝比武帝一招:奈龙抓手韦小宝比武帝一招:绊倒韦小宝比武帝一招:大别韦小宝比武皇上招式:锁喉韦小宝对皇上招式:扣眼韦小宝对皇上招式:小擒拿韦小宝对皇上招式:乃龙抓手韦小宝招式与皇上:磕磕绊绊韦小宝斗皇招式:告别韦小宝斗皇招式:锁喉韦小宝斗皇招式:扣眼韦小宝斗皇招式:小擒拿韦小宝武功大战皇上招式:擒拿龙抢韦小宝的武功武功斗皇上招式:绊韦小宝斗皇上招式:大别子韦小宝斗皇上:锁喉5.七妃之隐居图12-6七妃之隐居publicclassSemaphoreTest{publicstaticvoidmain(String[]args){Listlist=newArrayList<>();list.add("韦小宝");list.add("阿克");list.add("双儿");list.add("曾柔");list.add("建宁公主");list.add("穆建平");list.add("方毅");list.add("苏权");信号量semaphore=newSemaphore(4,true);for(inti=0;i<8;i++){newThread(()->{try{semaphore.acquire();Stringuser=list.remove(newRandom().nextInt(list.size()));System.out.println("韦小宝和七个老婆住在桃园,每天打麻将,练武。四人麻将桌:"+user);Thread.sleep(3000L);}catch(InterruptedExceptionignore){}finally{semaphore.release();}}).start();}}}场景:经历大起大落于氏小宝终于决定和老婆们过上幸福的隐居生活,在桃园模拟隐居后,我们每天打麻将练武,可以凑成一张四人桌,这里用到信号量锁Semaphore,一个一次四人够一桌麻将四人随机抽取知识:信号量信号量锁使用测试结果:韦小宝和七个老婆住在桃园,每天打麻将,打武术四人麻将桌:曾柔和韦小宝带着七个老婆住在桃园每天打麻将练武麻将四人桌苏权韦小宝带着七个老婆住在桃园每天打麻将练武打麻将四人桌:双儿卫Xiaobao和七个老婆住在桃园。每天打麻将练武。四人麻将桌:阿珂韦小宝和七个老婆住在桃园。每天打麻将练武。四人麻将桌:方怡韦小宝和七个老婆住在桃园。每天打麻将练武。四人麻将桌:韦小宝娶了七个老婆,住在桃园。天天打麻将练武。四人麻将桌:建宁公主韦小宝与七个妻妾,住在桃园。天天打麻将练武。麻将桌四:穆建平3.总结在鹿鼎记的场景中,我们囊括了各种多线程的用例,包括不同的锁:Synchronized、CountDownLatch、ReentrantLock、ReentrantReadWriteLock、Semaphore。很多时候,如果你在学习的过程中,如果能够找到一些非常合适的例子,那么知识点的学习就会很快,也能给人留下深刻的印象。好了,本案到此结束,感谢大家的支持。同时每个场景中的多线程和加锁也可以有不同的方法使用来实现每个场景的效果,大家可以自己尝试一下。