当前位置: 首页 > news >正文

天津建设培训中心网站回老家做PHP网站

天津建设培训中心网站,回老家做PHP网站,五合一自助建站网站,中英文微信网站建设Lock和Condition Lock 线程之间同步或者竞争都需要锁这类结构#xff0c;一般我们都会用Object的wait和signal搭配synchronized关键字进行多线程开发#xff0c;但是很多时候会造成死锁的现象#xff0c;这是因为synchroniezd无法破坏死锁的产生条件#xff0c;但是Lock接…Lock和Condition Lock 线程之间同步或者竞争都需要锁这类结构一般我们都会用Object的wait和signal搭配synchronized关键字进行多线程开发但是很多时候会造成死锁的现象这是因为synchroniezd无法破坏死锁的产生条件但是Lock接口的一些实现类可以帮助我们避免思索地产生。一般用的比较多的是ReentrantLock这个Lock接口的实现类。 ReentrantLock 很多时候ReentrantLock是为了替代synchronized情况下同意出现死锁的情况的。并且相比于synchroniezd还有以下几个优点 可中断可以设置超时时间可以设置为公平锁支持多个条件变量与 synchronized 一样都支持可重入 比如笔者有使用过一些任务分配和执行工具如果出现了一台机器/CPU出现了同一时间内分配了多个任务或者长时间没有分配任务那么对于我们的业务来说就很危险在这种情况下可以通过使用ReentrantLock帮助我们解决这种问题 public static void main(String[] args) throws ExecutionException, InterruptedException {/*** 我们是以任务为主体获取信息如果是我们的资源主体拉取信息则reentrantLock是可以工具是否是公平锁而且获得对资源的掌控权的* 如果是tryLock()方法则只要一看到有所就会获取锁*/ ​/*** 资源有10个*/AtomicReferenceInteger resource new AtomicReference(10);//锁final Lock reentrantLock new ReentrantLock(); ​ExecutorService executorService Executors.newFixedThreadPool(1); ​ListTaskInfo taskInfos new ArrayList();for (int i 0; i 10; i) {taskInfos.add(new TaskInfo().setTaskName(任务 i).setId(1));} ​ListCompletableFutureString taskList new ArrayList();ListTaskInfo didntExecuteTaskList new ArrayList();for (int i 0; i 100; i) {int finalI i;taskList.add(CompletableFuture.supplyAsync(() - {reentrantLock.lock();TaskInfo taskInfo taskInfos.get(finalI % 10).setId(finalI);boolean executable resource.get() 0;if (executable) {resource.getAndSet(resource.get() - 1);/*** 开始执行*/CompletableFuture.supplyAsync(() - {try {Thread.sleep((long) (Math.random() * 100 % 2));} catch (InterruptedException e) {throw new RuntimeException(e);}/*** 执行完成*/resource.getAndSet(resource.get() 1);return 1;});reentrantLock.unlock();} else {didntExecuteTaskList.add(taskInfo);}return 任务 taskInfo.getTaskName() 执行 (executable ? 成功 : 失败);}, executorService));} ​for (CompletableFutureString completableFuture : taskList) {System.out.println(completableFuture.get());}System.out.println(没有完成的任务有 didntExecuteTaskList.stream().map(TaskInfo::getTaskName).collect(Collectors.toList()));}此时有可能会发生死锁如果出现一些任务长时间占用那么我们可以通过ReentrantLock 的 lockInterruptibly() 方法及时进行打断这种方式在synchronized情况下无法实现 Condition Condition将Object监控器方法 wait notify和notifyAll 分解为不同的对象从而通过与任意Lock实现结合使用从而使每个对象具有多个等待集。 Lock替换了synchronized方法和语句的使用而Condition替换了Object监视器方法的使用。 Condition实例从本质上绑定到锁。 要获取特定Lock实例的Condition实例请使用其newCondition()方法 如果说Lock是锁只有拿到锁才能执行的话Condition就是信号量有了信号量才能执行后续的操作Condition更像是线程之间的同步机制如果说有多个线程之间需要相互进行条件制约的话可以通过Condition进行开发业务。 有时候lock抢到了锁可能发现不需要进行执行所以的话还需要condition做更加细致的操作。 比如在Lock和Condition下实现的消息队列中Lock保证消息队列线程安全Condition保证业务需要比如说不能消费空队列或者往满队列中添加信息这种方式在很多框架中都有使用
http://www.hkea.cn/news/14406971/

相关文章:

  • 菏泽哪家网站设计公司好福州seo公司
  • 网站设计公司费用wordpress视频背景
  • 高大上 网站上海青浦做网站
  • 建设银行网站登录如何转账网络营销seo是什么意思
  • ftp免费注册网站东莞自媒体运营推广公司
  • 禅城区电话黄页seo怎么做排名
  • 深圳网站的优化公司制作人韩剧在线观看免费高清国语
  • 彩票理财网站建设网站建站一本通
  • wordpress 批量删除所有文章重庆企业网站seo
  • 自己做网站打开很卡商机网创业好项目
  • 网站 设计报价企业网站形象建设
  • 网站备案 二级域名全球十大建筑设计公司
  • 网站设计主色学校免费的招标网站有哪些
  • 网站为什么需要空间遵义公司网站制作哪家好
  • app加网站开发华安县城乡规划建设局网站
  • 电子购物网站建设易营宝网站建设
  • 宁波网站推广怎样做网站建设文化教程
  • 网站生鲜建设市场分析wordpress分页404
  • 网站建设流程体会网站建设取得实效
  • 律师网站设计企业网站建设重要性
  • 网站seo快速排名创建网站的步骤是
  • 网站建设实录音乐学院网站的系统建设方式
  • 广安建设局网站应聘网站开发的自我介绍
  • 长沙学做网站建设头像设计易做图网站
  • 贵州建网站手机网站Com
  • 网文网站无锡网站建设制作设计
  • ic手机网站开发平台赣州seo排名
  • 免费手机小说网站建设iis搭建网站时
  • 网站建设询价公告招聘门户
  • 南昌网站关键词推广行政单位单位网站建设