多线程精华,面试专用
发布日期:2021-10-19 19:33:13
浏览次数:2
分类:技术文章
本文共 1791 字,大约阅读时间需要 5 分钟。
注意:部分代码为伪代码,注意虚假唤醒和死锁,对于同步快,使用同步集合类!!! 一,定义线程的方式 a,extends Thread b,implements Runnable 二,产生线程的方法 a,new Thread().start(); b, Executors.newFixedThreadPool(10).execute(new Runnable(){...}); c, Executors.newCachedThreadPool().execute(new Runnable(){...}); d, Executors.newScheduledThreadPool(10).schedule(new Runnable(){...}) e, Executors.newSingleThreadExecutor(10).execute(new Runnable(){...})//可替补单线程 三,实现同步的方式 a,synchronized 关键字 b, new Semaphore(1); //信号灯还可以控制并发数量, c, Lock lock = new ReentrantLock(); d, ReadWriteLock lock = new ReentrantLock(); 注意:1,高并发时,防止重入,应循环检查当前状态 2, 在写锁释放前lock读锁,会将写锁降级为读写锁 3, 无论如何,最终需要释放锁 四,线程间通信的方式 a,this.wait(); this.notify()/this.notifyAll() b, new BlockingQueue(1),new BlockingQueue(1); //可使用阻塞队列来实现,因为其put(...)和take()均为阻塞方法 c, condition1 = new ReentrantLock().new Condition(); condition2 = new ReentrantLock().new Condition(); condition1.await(); ..执行过程.... condition2.signal(); 五,线程内数据共享: ThreadLocal<ThreadScopeSharedData> map = new ThreadLocal<ThreadScopeSharedData>(); 建议:本地线程结合单例模式使用 五,应用场景 a,去东莞交友模式: 创建10个钢铁战士 召唤集合石: CyclicBarrier barrier = new CyclicBarrier(len); 集合: barrier.await(); 解散:barrier.reset(); 抵达东莞,会长喊话,给每个战士们,分配任务,最后统计成绩 CountDownLatch od = new CountDownLatch(1); CountDownLatch ob = new CountDownLatch(n); od.countDown();//让战士们自由发挥 ob.await();//等待战士们凯旋 new Runnable(){ void run(){ od.await();//会长分配任务细节 //任务细节:偷菜 CompletionService<Integer> service = new ExecutorCompletionService<Integer>(pool); 播种:serice.submit(new CallAble(){....}); 收获:serice.take(); ob.countDown();//每一个战士完成任务时,调用一次(此代码需要调用10次) } } 拓展:因网吧电脑数量有限,执行任务前可采用信号灯来控制战士们同时上机的数量 b,数据交换 Exchanger<Object> exchanger = new Exchanger<Object>(); 线程一细节: Object resultOne =exchanger.exchange(毛毛); 线程二细节: Object resultTwo =exchanger.exchange(卡素); 执行结果,毛毛和卡素完成了被交换 ^ o ^ c,定时器 略~~
转载地址:https://blog.csdn.net/u013494310/article/details/20658503 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月04日 21时54分38秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
C#用正则表达式去匹配被双引号包起来的中文
2019-04-27
lua table排序
2019-04-27
Unity发布的ios包在iphone上声音是从听筒里出来的问题
2019-04-27
UIScrollView复用节点示例
2019-04-27
Unity 5 AudioMixer
2019-04-27
Unity 代码混淆: CodeGuard的使用
2019-04-27
UGUI 列表循环使用
2019-04-27
使用命令行运行unity并执行某个静态函数(运用于命令行打包和批量打包)
2019-04-27
web.py框架
2019-04-27
web.py学习笔记
2019-04-27
python的代码缩进
2019-04-27
A* Pathfinding Project (Unity A*寻路插件) 使用教程
2019-04-27
bash学习笔记
2019-04-27
sqlite学习
2019-04-27
手把手教你实现Unity与Android的交互
2019-04-27
手把手教你使用Unity的Behavior Designer
2019-04-27
Unity3D摄像机裁剪——NGUI篇
2019-04-27
lua深拷贝一个table
2019-04-27
app运行提示Unable to Initialize Unity Engine
2019-04-27
spring boot 与 Ant Design of Vue 实现修改按钮(十七)
2019-04-27