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

中国建设银行网站解绑手机网站服务建设公司

中国建设银行网站解绑手机,网站服务建设公司,设计公司的企业远景,什么是网站的根目录JUC并发编程_Lock锁 1、Lock锁介绍2、主要方法3、与 synchronized 的区别4、Condition 使用示例 1、Lock锁介绍 Java中的 Lock 锁是 java.util.concurrent.locks 包下的一个接口#xff0c;它提供了比 synchronized 关键字更灵活的锁定机制。 2、主要方法 lock()#xff1a… JUC并发编程_Lock锁 1、Lock锁介绍2、主要方法3、与 synchronized 的区别4、Condition 使用示例 1、Lock锁介绍 Java中的 Lock 锁是 java.util.concurrent.locks 包下的一个接口它提供了比 synchronized 关键字更灵活的锁定机制。 2、主要方法 lock()获取锁。如果锁不可用则当前线程将被禁用直到锁变为可用。tryLock()尝试获取锁如果锁可用则获取锁并立即返回true如果锁不可用则立即返回false并且当前线程不会被禁用。tryLock(long time, TimeUnit unit)尝试获取锁如果锁在给定的等待时间内可用并且当前线程未被中断则获取锁。lockInterruptibly()用于以可中断的方式获取锁。这个方法与 lock() 方法的主要区别在于当线程尝试获取锁而锁已被其他线程持有时lock() 方法会使线程在锁上无限期地等待直到锁变为可用而 lockInterruptibly() 方法允许等待锁的线程在等待过程中响应中断unlock()释放锁newCondition()返回绑定到此 Lock 实例的新 Condition 实例。Condition 提供了与Object监视器方法如wait、notify和notifyAll类似的功能但与Lock实例相关联。 3、与 synchronized 的区别 灵活性Lock 锁提供了比 synchronized 更灵活的锁定操作。例如tryLock 方法允许在不能立即获取锁时不会使线程进入阻塞状态而是返回一个布尔值。可中断性Lock 锁支持获取锁时的中断响应而 synchronized 不支持。这意味着如果某个线程在等待锁的过程中被中断它可以立即响应中断而不是无限期地等待超时尝试Lock 锁允许尝试获取锁时设置超时时间如果在这个时间内锁没有被获取到则线程可以放弃等待去做其他事情条件变量Lock 锁提供了 Condition 接口支持多个条件变量而 synchronized 关键字则只有一个条件变量即对象监视器锁的获取和释放synchronized 锁的获得和释放都是自动的Lock 锁需要手动获取和释放。锁的公平性synchronized 锁是非公平锁Lock 锁默认是非公平锁的但可以通过构造函数传参改变为公平锁。精准唤醒synchronized 的唤醒机制是基于 wait/notify 或 notifyAll 方法的其中 notify 方法只能随机唤醒等待队列中的一个线程无法做到精准唤醒。Lock 锁可以通过操作不同 Condition 实例的 signal() 方法实现精准唤醒。 4、Condition 使用示例 创建一个简单的生产者-消费者场景其中使用 ReentrantLockLock接口的一个实现和 Condition 来控制对共享资源的访问 import java.util.LinkedList; import java.util.Queue; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class ProducerConsumerExample { private final QueueInteger queue new LinkedList(); private final int capacity 10; private final Lock lock new ReentrantLock(); private final Condition notFull lock.newCondition(); private final Condition notEmpty lock.newCondition(); public void produce(int value) throws InterruptedException { lock.lock(); try { while (queue.size() capacity) { // 当队列满时生产者等待 notFull.await(); } queue.add(value); System.out.println(Produced: value); // 通知消费者队列中有新元素 notEmpty.signal(); } finally { lock.unlock(); } } public void consume() throws InterruptedException { lock.lock(); try { while (queue.isEmpty()) { // 当队列空时消费者等待 notEmpty.await(); } int value queue.poll(); System.out.println(Consumed: value); // 通知生产者队列中有空间 notFull.signal(); } finally { lock.unlock(); } } public static void main(String[] args) { ProducerConsumerExample example new ProducerConsumerExample(); // 创建生产者和消费者线程 Thread producer new Thread(() - { for (int i 0; i 20; i) { try { example.produce(i); Thread.sleep(100); // 模拟耗时操作 } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } }); Thread consumer new Thread(() - { for (int i 0; i 20; i) { try { example.consume(); Thread.sleep(150); // 模拟耗时操作 } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } }); // 启动线程 producer.start(); consumer.start(); } }await() 方法 await() 方法是 Condition 接口中的一个方法它会使当前线程进入等待状态即阻塞直到其他线程调用该Condition 的 signal() 或 signalAll() 方法或者当前线程被中断或者等待过程中发生了 InterruptedException 异常。 在调用 await() 方法之前当前线程必须已经获得了与 Condition 相关联的锁。调用 await() 方法后当前线程会释放这个锁并进入等待状态。当线程从 await() 方法返回时它必须重新获取这个锁才能继续执行。 在 ProducerConsumerExample 的 produce 方法中当队列满时生产者线程会调用 notFull.await() 等待直到有消费者线程消费了队列中的元素并调用了 notFull.signal() 或 notFull.signalAll() 方法。 在 consume 方法中当队列空时消费者线程会调用 notEmpty.await() 等待直到有生产者线程生产了新的元素并调用了 notEmpty.signal() 或 notEmpty.signalAll() 方法。 signal() 方法 signal() 方法是 Condition 接口中的一个方法它用于唤醒等待在该 Condition 上的单个线程如果有的话。在调用 signal() 方法之前当前线程必须已经获得了与 Condition 相关联的锁。 在 ProducerConsumerExample 的 produce 方法中当生产者线程成功地将一个元素添加到队列中后它会调用 notEmpty.signal() 来唤醒可能正在等待的消费者线程如果有的话以便消费者线程可以消费这个新元素。 在 consume 方法中当消费者线程成功地从队列中取出一个元素后它会调用 notFull.signal() 来唤醒可能正在等待的生产者线程如果有的话以便生产者线程可以继续生产新的元素。 需要注意的是signal() 方法只会唤醒等待队列中的一个线程而 signalAll() 方法会唤醒等待队列中的所有线程。在这个例子中我们使用了 signal() 方法因为生产者-消费者问题通常只需要唤醒一个等待的线程生产者唤醒消费者或消费者唤醒生产者。然而在某些情况下使用 signalAll() 可能更合适特别是当你不确定应该唤醒哪个线程时。但是使用 signalAll() 可能会导致不必要的线程唤醒和竞争从而影响性能。
http://www.tj-hxxt.cn/news/224762.html

相关文章:

  • 湖南省建设工程造价总站网站wordpress编辑权限设置
  • 手机个人简历模板下载网站模板深圳福田区怎么样
  • 中通建设计院第四分公司网站网站建设描述怎么写
  • 网站建设与维护实验心得东莞房价2022最新价格
  • 问卷调查网站怎么做苏州建设工程检测协会网站
  • 建设网站费用会计分录网站信息更新如何做
  • 南昌哪里有建设网站的飓风算法恢复的网站
  • 奎屯网站制作学推广网络营销去哪里
  • 高端网站建设赣州网站建设 网站优化
  • 如何做响应式网站设计建筑官方网站
  • 网站添加缩略图电子商务论文网站建设
  • 成都小程序建设乚成都柚米网络营销就是seo正确吗
  • 网站开发和移动开发网站名称重要吗
  • 大城网站优化电子商务网站开发书
  • 公司网站建设服务费怎么做账介绍一个电影的网站模板
  • 哪些群体对网站开发有需求东莞市塘厦镇
  • 网站建设需求确定wordpress建站产品导入不同目录
  • html图片网站网络营销十大成功案例
  • 淄博网站建设优惠臻动传媒网站自适应尺寸
  • 域名注册平台的网站怎么做怎么模仿一个网站
  • 数据交易网站开发网站制作 电子商城
  • 襄阳谷城网站建设网站建设及运行情况介绍
  • 光效网站为什么不用h5做网站
  • 网站原创文章规范wordpress 运行时间
  • 哪个做图网站可以挣钱淘宝做网站的多少钱
  • 支持html5的网站西安市建设网站
  • 南昌公司做网站需要多少钱成武城乡住房建设局网站
  • 网站系统参数设置建设金融行业网站
  • 网站开发问题解决找公司开发网站
  • 设计师能做网站前端吗wordpress图表模板类