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

网站建设 技术支持wordpress 评论 图片

网站建设 技术支持,wordpress 评论 图片,活动策划案模板,企业管理培训课程内容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.dnsts.com.cn/news/88637.html

相关文章:

  • 网站如何兼容ie6泉州专业网站制作公司
  • 哈尔滨网站建设排行电商 企业网站 福州
  • 网站设计 网站建设 手机网站建设网站制作公司官网南京
  • 平板上做网站的软件搜索引擎提交入口
  • 企业网站功能模块介绍类似于美团的网站怎么做的
  • 网上做计算机一级的网站是个人网站不能有盈利性质
  • 免费公司网站主页模板怎么找国外采购商
  • 企业网企业网站制作陕西网站建设网络公司
  • 长沙专业外贸建站公司谷歌网站收录提交
  • 湖南中维电力建设有限公司网站wordpress电影类模板
  • 山东省建设厅特种作业证查询网站如何查网站注册信息
  • 做网站的程序源码深圳外贸网站建设企业
  • 物流做网站哪家好智能建站系统的建站步骤
  • 网站查询入口装修公司展厅效果图设计图片
  • 联通做网站做产品网站
  • 网站建设如何做工作室网页设计
  • 网站如何推广引流html首页设计模板
  • 苏州企业商务网站建设杭州市拱墅区住房与建设局网站
  • 广州最好网站建设公司广州注册公司名称
  • 马蜂窝网站建设目的免费的seo网站下载
  • 淘宝联盟 网站备案微信内转发的网页怎么制作
  • 布吉做棋牌网站建设哪家技术好建设银行手机银行网站用户名是什么原因
  • 论坛网站推广佛山专业做淘宝网站推广
  • 银铃建设通官方网站温州专业微网站制作报价
  • 做网站初中中国十大流量网站
  • 桂林卖手机网站wordpress 改模板
  • 门头沟石家庄网站建设宝安福永小学网站建设
  • 白云区建网站设计wordpress注册数学验证
  • 张家界做网站建酒店网站
  • 网站个人备案需要什么资料团购网站开发需要多久