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

哈尔滨多语言网站建设wordpress 自定义分页

哈尔滨多语言网站建设,wordpress 自定义分页,一般通过什么判断鱼的年龄,wordpress获取tag地址Lock和Condition Lock 线程之间同步或者竞争都需要锁这类结构,一般我们都会用Object的wait和signal搭配synchronized关键字进行多线程开发,但是很多时候会造成死锁的现象,这是因为synchroniezd无法破坏死锁的产生条件,但是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个*/AtomicReference<Integer> resource = new AtomicReference<>(10);//锁final Lock reentrantLock = new ReentrantLock();ExecutorService executorService = Executors.newFixedThreadPool(1);List<TaskInfo> taskInfos = new ArrayList<>();for (int i = 0; i < 10; i++) {taskInfos.add(new TaskInfo().setTaskName("任务" + i).setId(1));}List<CompletableFuture<String>> taskList = new ArrayList<>();List<TaskInfo> 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 (CompletableFuture<String> 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.yayakq.cn/news/756716/

相关文章:

  • 泰州市高港区建设局网站百度推广联系人
  • 网站放到iis如何做指向外贸软件app
  • 淘宝客网站备案教程广州学建网站
  • 个人政务公开网站建设工作总结网站哪家公司做的最好
  • 网站开发有哪几个阶段网站建设基本流程是什么
  • 上海网站公司设计php网站中水印怎么做
  • 如何把网站点击连接到百度商桥黑帽seo论坛
  • 杭州网站建设faxide建立电子商务网站目的
  • 个人网站设计方案建站推广外包
  • 安顺公司做网站建设网站申请
  • 大连seo整站优化广告策划ppt案例
  • 郑州制作网站ihanshi做热点图现在用什么网站
  • cod单页建站工具汽车网站模板下载
  • 网站建设原则包括哪些方面高端网站制作技术
  • 左侧 导航 网站网站建设与管理心得体会
  • 织梦系统做的商城网站网站业务建设是什么意思
  • 安阳网站建设公司出租车公司h5页面设计尺寸
  • 唐山企业网站建设公司wordpress主机中文网
  • 网站模板下载后怎么用口碑好的番禺网站建设
  • 潍坊mip网站建设常见的网站开发语言
  • 大家称赞的网站建设网站解析出问题 邮件收不到了
  • 怎么把网站做seo到首页微信审批小程序
  • 建设干部培训中心网站四川省建设注册中心网站
  • 深圳建网站开发费用东胜区建设局网站
  • 网站建设头部代码网站建设陆金手指谷哥4
  • wordpress设置为中文简述影响关键词优化的因素
  • 网站可以免费看在哪找做调查赚钱的网站
  • p2p网站建设小型网站设计及建设论文文献
  • 建筑工程网络计划图绘制软件兴安盟seo
  • 彩票网站建设成本音乐网站 源码