`
shelldream
  • 浏览: 2387 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

java ,Lock ,Condition,

    博客分类:
  • JAVA
阅读更多

最近看了一下同步队列的问题,之前由于没用到只是简单了解下,现在详细研究下,看到了针对队列的同步,等待与唤醒,发现了wait()与await()的区别就查资料看看具体区别,现先贴下查找的资料

资料摘自反手高远的Lock的await/singal 和 Object的wait/notify 的区别

 

在使用Lock之前,我们都使用Object 的wait和notify实现同步的。举例来说,一个producer和consumer,consumer发现没有东西了,等待,produer生成东西了,唤醒。
线程consumer 	线程producer
synchronize(obj){
    obj.wait();//没东西了,等待
} 	synchronize(obj){
    obj.notify();//有东西了,唤醒
}

有了lock后,世道变了,现在是:
lock.lock();
condition.await();
lock.unlock(); 	lock.lock();
condition.signal();
lock.unlock();

为了突出区别,省略了若干细节。区别有三点:

    1. lock不再用synchronize把同步代码包装起来;
    2. 阻塞需要另外一个对象condition;
    3. 同步和唤醒的对象是condition而不是lock,对应的方法是await和signal,而不是wait和notify。

为什么需要使用condition呢?简单一句话,lock更灵活。以前的方式只能有一个等待队列,在实际应用时可能需要多个,比如读和写。为了这个灵活性,lock将同步互斥控制和等待队列分离开来,互斥保证在某个时刻只有一个线程访问临界区(lock自己完成),等待队列负责保存被阻塞的线程(condition完成)。

通过查看ReentrantLock的源代码发现,condition其实是等待队列的一个管理者,condition确保阻塞的对象按顺序被唤醒。

在Lock的实现中,LockSupport被用来实现线程状态的改变,后续将更进一步研究LockSupport的实现机制

 

之后上自己的测试验证代码

分享到:
评论

相关推荐

    JavaLock与Condition的理解Reentran

    Java Lock与Condition是Java并发编程中的重要概念,它们提供了比synchronized关键字更细粒度的控制,从而使得多线程程序的设计和管理更加灵活高效。本文将深入探讨ReentrantLock(可重入锁)和Condition的基本原理、...

    Java多线程中ReentrantLock与Condition详解

    Java多线程中ReentrantLock与Condition详解 ReentrantLock是Java多线程中一种高级的锁机制,它实现了Lock接口,提供了与synchronized相同的并发性和内存语义,但添加了一些特性,如锁投票、定时锁等候和可中断锁...

    java中的Lock类和Condition类.docx

    Java中的Lock类与Condition类是Java并发编程的重要组成部分,它们为多线程环境下的同步提供了更为灵活和强大的控制。在JDK 1.5及之后的版本中,Lock类作为替代synchronized关键字的一种方式出现,提供了更精细的锁...

    java Lock接口详解及实例代码

    Java Lock接口是Java并发编程中一个重要的组成部分,它提供了一种更为灵活的锁机制,相比传统的`synchronized`关键字,Lock接口允许我们进行更细粒度的控制,包括可中断的锁等待、尝试获取锁以及定时等待等。...

    Java concurrency之Condition条件_动力节点Java学院整理

    在Java并发编程中,`Condition`接口是Java并发包(java.util.concurrent)中的一个重要组成部分,它提供了比`synchronized`关键字更为精细的线程同步和唤醒机制。`Condition`允许我们创建多个独立的等待队列,每个...

    Java多线程之ReentrantLock与Condition - 平凡希 - 博客园1

    Java中的`ReentrantLock`是Java并发包`java.util.concurrent.locks`中的一个高级锁机制,它是可重入的互斥锁,具有与`synchronized`关键字相似的同步性,但提供了更多的灵活性和控制功能。本篇文章将深入探讨`...

    生产者-消费者(lock和condition).zip

    在这个场景中,"生产者-消费者(lock和condition).zip"的文件内容可能包含一个使用Java语言实现的示例,它利用了`java.util.concurrent.locks.Lock`接口和`Condition`接口来解决这个问题。 `Lock`接口是Java并发库...

    Java Lock锁多线程中实现流水线任务

    使用Java Lock锁来实现流水线任务非常简单,我们可以使用ReentrantLock类来创建一个Lock对象,然后使用Condition对象来实现线程之间的通信。在上面的例子中,我们使用了三个Condition对象来实现三个线程之间的通信。...

    生产者消费者Java—LOCK机制

    为了确保线程安全和有效率的数据交换,Java提供了多种同步机制,其中包括Lock接口及其实现,如ReentrantLock。本项目通过Lock机制实现了生产者-消费者的解决方案。 Lock接口是Java并发库(java.util.concurrent....

    Java使用Condition控制线程通信的方法实例详解

    Java 中,Condition 类是 Lock 接口的一个补充,它提供了一种机制来让线程等待某个条件的满足,然后继续执行。Condition 将同步监视锁方法(wait、notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与...

    Java编程中实现Condition控制线程通信

    Java中的Lock接口及其实现,如ReentrantLock,提供了更高级的线程通信机制,其中包括Condition接口。 Condition接口是Java并发包java.util.concurrent.locks的一部分,它允许我们创建特定于锁的等待集合。相比于...

    java 锁 Lock接口详解.docx

    在Java 1.5版本后,引入了`java.util.concurrent.locks`包,其中的`Lock`接口作为同步机制的新选择,弥补了`synchronized`关键字的一些局限性。下面将详细解释`Lock`接口以及与`synchronized`的区别。 `Lock`接口是...

    Java并发编程(20)并发新特性-Lock锁和条件变量(

    本资源主要探讨了Java并发的新特性,特别是Lock锁和条件变量的使用。下面将详细阐述这两个概念以及如何在实际编程中应用它们。 Lock锁是Java并发库中的一个核心组件,位于java.util.concurrent.locks包下。相比传统...

    Java基于Lock的生产者消费者模型示例

    Java中基于Lock的生产者消费者模型是使用Lock和Condition来实现线程同步和通信的。 在本示例中,我们使用了ReentrantLock和Condition来实现生产者消费者模型。ReentrantLock是Java中的一种可重入锁,它可以多次锁定...

    Java学习资料-详解Condition的await和signal等待/通知机制

    在Java多线程编程中,`Condition`是Java并发包`java.util.concurrent.locks`中的一个接口,它提供了比`Object`类中的`wait()`、`notify()`和`notifyAll()`更加灵活和强大的线程间通信机制。`Condition`与`Lock`配合...

    第四节(Lock关键字用法)

    在Java编程语言中,`Lock`关键字是多线程编程中的一个重要概念,它提供了一种比内置锁(synchronized)更灵活的同步机制。在深入理解`Lock`关键字的用法之前,我们先来了解一些多线程的基础知识。 多线程是现代...

Global site tag (gtag.js) - Google Analytics