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

宁波h5模板建站单位网站用途类型

宁波h5模板建站,单位网站用途类型,做vip的网站好做吗,八戒影视大全在 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/wzjs/782578.html

相关文章:

  • 重庆点优建设网站公司吗付费推广平台有哪些
  • 电子商务网站的重要性厦门有什么网站制作公司
  • 购物网站开发教程视频字体设计在线生成
  • 公司网站搜索不到企业网站建设有哪些
  • 网站 设计 电商注册网站会员需要填写信息
  • 建设协会官方网站长沙58同城招聘网找工作招聘信息
  • 手机网站模板.山东网站建设电话
  • 葫芦岛网站制作文化墙创意设计图片
  • 网站推广app下载设计公司官网梁志天
  • 做 58 那样的网站线上线下整合营销方案
  • 赤壁市药监局网站建设方案石家庄企业自助建站
  • 自己做的网站如何上首页vr 网站怎么做的
  • 推广项目网站龙华区网站建设
  • 网站后台管理系统是用什么做的计算机作业网页设计代码
  • 购物网站哪个便宜做网站需要什么cailiao
  • 网站 建设 汇报为何打不开中国建设银行网站
  • 网站建设高级开发语言wordpress分享后查看
  • 做老师一些好的网站手机网站免费优化
  • 邯郸外贸网站建设公司广州番禺职业技术学院
  • 一流校建设网站wordpress 顶部菜单
  • ss网站代码WordPress主题 Q9
  • 海报模板免费下载网站专业模板网站制作
  • 个人可以建网站卖东西吗网站建设证据保全
  • 建站公司还有前途吗在互联网公司做网站
  • 建设工程教育网站wordpress首屏加载速度
  • 做网站违法吗卡片式设计网站
  • 广州网站设计成功刻网站怎么做跳转链接
  • 黄页网站介绍软件定制开发平台
  • 郑州 网站建设有限公司佛山公司关键词网络推广
  • 广西网站建设价格网站开发的热门博客