`
king_tt
  • 浏览: 2221955 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java对象锁wait()/notify()的一点理解

 
阅读更多

wait()和notify()是用来 做线程同步用的, 他们都必须在synchronized语句块中调用。

进入synchronized块表示获得了对象锁,离开synchronized块表示释放了对象锁(对象锁释放了,其他等待此对象锁的线程就可以执行自己的synchronized语句块了)。

那么对象锁是个什么概念呢?

你可以把任何对象视做一把锁(? extends Object),锁是Java对象与生俱来的特性。

synchronized (mLock), mLock就是一个对象(可以是任何对象),synchronized的意思就是尝试获得锁。如果得到了锁,那么其他线程的synchronized(mLock)语句将会阻塞,直到获得锁的synchronized语句块执行完毕或者mLock.wait()被调用。

当我们在synchronized块 中调用mLock.wait()方法,那么调用线程(线程A)就会阻塞在wait()语句那里,直到其他线程(线程B)调用mLock.notify()方法。

当mLock.notify()方法调用完成后,并不表示线程A可以立即执行,因为mLock.notify()方法也是在synchronized块中的,只有线程B继续执行直到离开synchronized块后(离开后就会释放mLock对象锁),线程A才能够获得对象锁并开始执行wait()之后的语句。

分享到:
评论

相关推荐

    Java 同步方式 wait和notify/notifyall

    在Java中,`wait()`, `notify()`, 和 `notifyAll()` 是Java Object类的三个方法,它们在实现线程间通信和协作时扮演着关键角色。这些方法主要用于解决线程等待和唤醒的问题,是基于Java Monitor(监视器)模型的。 ...

    Java 同步锁 wait notify 学习心得

    标题和描述概述的知识点主要集中在Java的多线程机制中,特别是`wait`和`notify`方法在同步锁中的应用。这些方法对于控制线程之间的交互至关重要,尤其是在资源有限或需要确保数据一致性的情况下。 ### Java同步锁...

    Java多线程wait和notify

    `wait()` 方法会让当前持有锁的线程进入等待状态,释放锁,直到其他线程调用 `notify()` 或 `notifyAll()` 唤醒它。`notify()` 则会随机选择一个等待在该对象监视器上的线程并唤醒它,而 `notifyAll()` 则会唤醒所有...

    Java的sychronized、wait和notify范例

    这两个方法属于`Object`类,因此所有Java对象都可以调用。它们主要用于线程间通信,配合`synchronized`使用。 1. `wait()`:让当前持有锁的线程释放锁,并进入等待池,直到其他线程调用`notify()`或`notifyAll()`...

    wait_notify_demo

    在Java中,`wait()`、`notify()`和`notifyAll()`方法都是与对象锁相关的,它们用于控制线程的同步。使用这些方法的前提是线程必须拥有对象的监视器,也就是对象锁。这是通过在synchronized块或方法中调用它们来实现...

    浅谈java多线程wait,notify

    在本文中,我们将通过示例代码详细介绍Java多线程wait和notify的使用,帮助读者更好地理解和掌握这两个机制。 wait机制 在Java中,wait机制用于暂停当前线程的执行,并释放当前对象的锁,以便让其他线程获得锁并...

    一个理解wait()与notify()的例子

    本文旨在解析一个具体的Java多线程示例代码,以帮助读者更好地理解`wait()`与`notify()`方法的作用及其实现机制。这两个方法是Java中实现线程间通信的重要手段之一,尤其在解决生产者消费者模型、读者写者问题等经典...

    等待机制与锁机制wait notify

    每个Java对象都有一个内置的锁,当多个线程尝试访问同一对象的同步方法或同步代码块时,只有一个线程能够获取到这个锁并执行,其他线程则必须等待。这就是Java的互斥锁机制,用于保证同一时间只有一个线程执行特定...

    java中几个notify、wait使用实例

    这两个方法定义在`Object`类中,因此所有Java对象都可以作为锁来使用。在深入探讨之前,我们先了解下`wait()`、`notify()`以及`notifyAll()`的基本概念。 ### `wait()` 方法 当一个线程执行到`wait()`方法时,它会...

    java-wait和notify的用法.pdf

    `wait()`方法的作用是使当前持有对象锁的线程暂停执行,进入等待池,释放对象锁,直到其他线程调用同一对象的`notify()`或`notifyAll()`方法来唤醒它。当线程被唤醒后,它并不会立即恢复执行,而是需要再次竞争对象...

    深入理解Wait、Notify和Wait与sleep区别

    1. **wait()**:当一个线程调用对象的`wait()`方法时,它会释放当前对象的锁,并进入等待池,直到其他线程调用同一对象的`notify()`或`notifyAll()`方法唤醒它。唤醒后,线程不会立即恢复执行,而是需要重新获取对象...

    java多线程设计wait[参考].pdf

    Java中的多线程设计涉及到许多核心概念,其中wait/notify机制是实现线程间通信和协作的关键工具。这个机制主要用于解决资源的分配和同步问题,它依赖于Java的内置锁机制,即`synchronized`关键字和对象锁。 首先,...

    wait,notify等线程知识.pdf

    Java中的多线程协同工作是通过一系列的同步机制来实现的,其中wait、notify和notifyAll是基于对象监视器的同步原语。这些方法在Java的Object类中定义,主要用于线程间的通信和协作,确保资源的安全访问。下面将详细...

    核心JAVA/CoreJava/

    同步机制包括synchronized关键字、wait/notify机制以及Lock接口,这些都是多线程编程中防止数据不一致的关键。并发编程还包括ExecutorService、Future和Callable等高级工具,用于高效地管理线程池和异步任务。 除此...

    Sun Certified Programmer for the Java 2 Platform(310-065)

    这些题目反映了310-065考试的重点,包括但不限于:Java基础语法、异常处理、多线程编程(并发和同步)、对象监视器和wait/notify机制。考生在准备考试时,需要深入理解这些概念,并能够编写和分析实际的Java代码以...

    Java多线程同步(wait()notify()notifyAll())[文].pdf

    本文将深入探讨Java中的wait()、notify()和notifyAll()方法,以及synchronized关键字和原子操作在多线程环境中的应用。 1. **wait()方法**: - wait()是Object类的一个方法,它的作用是让当前线程暂停执行并释放它...

    主线程去控制子线程wait与notify

    在Java多线程编程中,`wait()`和`notify()`是两个非常重要的方法,它们用于线程间的协作和通信。这两个方法是Java语言中的Object类提供的,因此所有的对象都可以使用。在本文中,我们将深入探讨如何使用主线程来控制...

    java代码-wait-notify 生产者消费者

    在"java代码-wait-notify 生产者消费者"的场景下,`wait()`方法让当前持有锁的线程暂停执行并释放锁,进入等待状态,直到其他线程调用`notify()`或`notifyAll()`唤醒它。而`notify()`方法会随机选择一个等待在这个...

    Java 多线程与并发(9-26)-JUC锁- LockSupport详解.pdf

    值得注意的是,park和unpark不会释放锁资源,它们提供了一种比synchronized和Object.wait/notify更加灵活的线程控制方式。 使用LockSupport进行线程同步,与传统的wait/notify或者wait/notifyAll方法相比,提供了...

Global site tag (gtag.js) - Google Analytics