线程间的通信

主要关注点是等待/通知机制

  • wait() 第一在当前代码处停止执行 第二将线程置入"预执行队列"中,直达接到通知或者中断

  • wait()方法条件

    1. 需要先获得锁
    2. wait()会释放锁
    3. 遇到interrupt()会出现InterruptedException,并且释放锁
  • notify()

    1. 需要先获得锁
    2. 通知那些可能等待该对象的对象锁的其他线程,有多个wait状态的线程,随机挑选一个。
    3. 不会立刻释放锁,需要等到将线程执行完成,退出synchroized
  • 领悟 阻塞是需要唤醒的进入到就绪然后让cpu去调度

  • wait(long) 等待某一时间内是否有线程对锁进行唤醒,如果超出时间则自动唤醒。

  • 生产者/消费者模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 中的线程通信(Thread Communication)是为了让多个线程能够协作、同步和共享数据。这是实现并发编程的关键,有助于提高程序的效率和响应性。Java 提供了几种机制来支持线程通信: 1. **wait() 和 notify() 方法**:这两个方法定义在 `Object` 类中,用于线程的等待-唤醒模式。一个线程调用 `wait()` 方法会释放对象锁并进入等待状态,而持有锁的其他线程可以通过 `notify()` 或 `notifyAll()` 来唤醒等待的线程。 2. **synchronized 关键字**:用于同步代码块或方法,保证在同一时只有一个线程可以访问特定代码段。这对于共享资源的互斥访问至关重要。 3. **BlockingQueue**:Java集合框架中的非阻塞队列,如 `LinkedList`、`ArrayBlockingQueue` 等,允许线程通过队列传递消息或数据。 4. **CountDownLatch** 和 **CyclicBarrier**:前者是一个计数器,当所有等待的线程完成某个任务后才会继续;后者是一个屏障,线程们会在到达屏障点时一起停下来,然后继续执行。 5. **Semaphore**:信号量可以控制同时访问某个资源的线程数量,类似于一个票证系统。 6. **Future 和 Callable**:`Future` 接口用于异步执行任务的结果,`Callable` 提供了一个可以返回结果的线程,结合 `ExecutorService` 可以实现线程的异步通信。 7. **EventListeners** 和 `java.util.Observer`:适用于事件驱动编程模式,当事件发生时通知感兴趣的监听者。 8. **Java Message Service (JMS)**:企业级的消息传递API,用于生产者和消费者之的异步通信。 每个场景选择合适的通信机制能更好地管理并发和避免死锁等问题。如果你需要进一步了解这些内容,或者有具体使用场景的问题,可以提出

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值