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

重庆二级站seo整站优化排名国外流行的内容网站

重庆二级站seo整站优化排名,国外流行的内容网站,专门做推广的软文,乡镇网站建设和培训在 Java 并发编程中,锁的等待和唤醒机制至关重要,通常使用 wait()、notify() 和 notifyAll() 来实现线程间的协调。本文将详细介绍这些方法的用法,并通过示例代码加以说明。 1. wait()、notify() 与 notifyAll() 在 Java 中,Obj…

在 Java 并发编程中,锁的等待和唤醒机制至关重要,通常使用 wait()notify()notifyAll() 来实现线程间的协调。本文将详细介绍这些方法的用法,并通过示例代码加以说明。

1. wait()notify()notifyAll()

在 Java 中,Object 类提供了 wait()notify()notifyAll() 方法,它们用于线程间的通信。

  • wait():使当前线程进入等待状态,并释放锁。
  • notify():唤醒单个等待线程。
  • notifyAll():唤醒所有等待线程。

注意,这些方法必须在同步代码块(synchronized)中调用,否则会抛出 IllegalMonitorStateException

2. 示例代码

下面的示例展示了 wait()notify() 的使用。

class SharedResource {private boolean available = false;public synchronized void produce() {while (available) {try {wait();} catch (InterruptedException e) {Thread.currentThread().interrupt();}}System.out.println("Producing an item");available = true;notify();}public synchronized void consume() {while (!available) {try {wait();} catch (InterruptedException e) {Thread.currentThread().interrupt();}}System.out.println("Consuming an item");available = false;notify();}
}public class WaitNotifyExample {public static void main(String[] args) {SharedResource resource = new SharedResource();Thread producer = new Thread(resource::produce);Thread consumer = new Thread(resource::consume);producer.start();consumer.start();}
}

3. wait()notify() 的工作原理

  1. 生产者线程 produce()availabletrue 时调用 wait() 进入等待状态,释放锁。
  2. 消费者线程 consume()availablefalse 时调用 wait() 进入等待状态,释放锁。
  3. produce() 生产后调用 notify() 唤醒 consume()
  4. consume() 消费后调用 notify() 唤醒 produce()

4. notifyAll() 的使用场景

notify() 仅唤醒一个线程,而 notifyAll() 可用于有多个等待线程的情况,以防止某些线程被永久阻塞。

public synchronized void produce() {while (available) {try {wait();} catch (InterruptedException e) {Thread.currentThread().interrupt();}}System.out.println("Producing an item");available = true;notifyAll();
}

5. LockCondition 方式

除了 synchronized,还可以使用 LockCondition 进行等待和唤醒控制。

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;class SharedResourceWithLock {private boolean available = false;private final Lock lock = new ReentrantLock();private final Condition condition = lock.newCondition();public void produce() {lock.lock();try {while (available) {condition.await();}System.out.println("Producing an item");available = true;condition.signal();} catch (InterruptedException e) {Thread.currentThread().interrupt();} finally {lock.unlock();}}public void consume() {lock.lock();try {while (!available) {condition.await();}System.out.println("Consuming an item");available = false;condition.signal();} catch (InterruptedException e) {Thread.currentThread().interrupt();} finally {lock.unlock();}}
}

6. 总结

  • wait()notify() 需要在 synchronized 块中使用。
  • notifyAll() 可防止线程被永久阻塞。
  • LockCondition 提供更灵活的等待和唤醒机制。

合理使用这些机制可以提升 Java 多线程程序的性能和可靠性。

http://www.dtcms.com/a/602256.html

相关文章:

  • 车载以太网 - SOME/IP简介
  • 宿州学校网站建设网站建设需求模板
  • 网站开发 密码做一个京东这样的网站需要多少钱
  • anylogic导出为java独立应用程序 运行bat报错解决方法
  • c语言编译爱心 | 学习如何用C语言编译打印爱心图案
  • 网站建设三种方法游戏代理加盟平台
  • 公司网站ICP注销wordpress主题详细安装流程
  • 简单梳理下RSA和AES加解密文件的流程图
  • PostgreSQL遍历所有的表并设置id为自增主键
  • 免费的网站域名域名网站这么做
  • 虚拟化hypervisor:Xen简介
  • 【路径算法】基于JavaScript实现IDA*算法,动态可视化展示路径规划过程
  • 做境外网站临汾住房与城乡建设厅网站
  • 淘宝做链接的网站广告营销专业
  • 【网络编程基础知识】
  • js中哪些数据在栈上,哪些数据在堆上?
  • 上海云盾sdk游戏盾对比传统高防ip的优势
  • 系统配置重复项处理:经验未必可靠
  • 网站开发与应用 大作业作业辽宁省建设培训中心网站
  • 服务器与普通个人电脑的主要区别是什么?
  • 亚购物车功能网站怎么做的百度软件应用市场
  • 二项分布(Binomial Distribution)详解:从理论到实践
  • 深圳有没有什么网站重庆顶呱呱网站建设
  • 国外网站 设计成都注册公司核名网站
  • 衡阳网站建设开发价格谷歌推广新手教程
  • 【2025最新】05 Spring Security 构建 RESTful Web 注册服务
  • 基于java的无人驾驶物流配送与管理系统设计
  • 基于安卓的在线教育系统的设计与实现【附源码】
  • 河南网站seo地址深圳带停机坪的别墅
  • 专业做家具的网站swf上传wordpress