Lock和Condition是为了替代synchroinzed、wait、notify的,有点是更面向对象,功能上也更强大。下面是一个简单的例子:
class Outputer {
Lock lock = new ReentrantLock();
public void output(String str) {
lock.lock();
try{
for (char c : str.toCharArray()) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.print(c);
}
System.out.println();
}finally{
lock.unlock();
}
}
}
Lock比传统的synchronzied的优点,除了更面向对象外,它还增加了读写锁的功能。
读写锁的优点是,多个读的线程是仍然可以并发的,仅仅是读和写、写和写之间做同步,这样既提高了读时的效率也保证了写时的安全:
ReentrantReadWriteLock wrl = new ReentrantReadWriteLock();
wrl.readLock().lock();
wrl.readLock().unlock();
wrl.writeLock().lock();
wrl.writeLock().unlock();
读写锁的一个应用是在缓存的实现中,读取缓存的时候先上读锁,然后判断在缓存中是否有数据,如果没有,则需要写,这个时候需要先将读锁解掉,然后上写锁,再加载数据,之后再解写锁,上读锁,在官方文档中有一个这样的例子:
Lock与synchronzied对应,与wait()和notify()对应的则是Condition:
你在将出传统的syncrhonized改成Lock之后,会发现wait和notify没法调了,这话时候需要使用Condition:
Condition condition = lock.newCondition();
condition.await();//this.wait();
condition.signal();//this.notify();
Condition较之以前的lock的好处是,之前的lock.wait()和lock.notify()无法根据实际情况去等待和唤醒一个想要的线程。有了Condition之后,可以设置多个condition,线程等待或唤醒是确定的某一个condition,这样在通信上更明确,也更方便了。
分享到:
相关推荐
【2018最新最详细】并发多线程教程,课程结构如下 1.并发编程的优缺点 2.线程的状态转换以及基本操作 3.java内存模型以及happens-before规则 4.彻底理解synchronized 5.彻底理解volatile 6.你以为你真的了解final吗...
接着,深入讲解了Java并发编程的核心API,如synchronized关键字、Lock接口、Condition接口、Semaphore等,帮助读者掌握Java并发编程的基本工具和方法。 除了基础知识和API的讲解,本书还重点介绍了Java并发编程的...
高并发编程第三阶段23讲 Semaphore工具的介绍以及借助于Semaphore构造一个Lock_.mp4 高并发编程第三阶段24讲 Semaphore工具API详细介绍-上_.mp4 高并发编程第三阶段25讲 Semaphore工具API详细介绍-下_.mp4 ...
java 并发 编程 多线程 concurrent lock condition executorserice executor java.util.curcurrent.
C++11 并发指南五(std::condition_variable 详解) std::condition_variable 是 C++11 标准中 <condition_variable> 头文件里的一个类,用于实现条件变量的功能。条件变量是一种同步机制,允许线程在某个条件下等待...
锁机制:JUC提供了Lock接口和Condition接口,可以实现更细粒度的锁控制和线程的等待和唤醒机制。 并发工具类:JUC提供了一些并发编程的工具类,如Semaphore、CountDownLatch、CyclicBarrier等,可以实现线程间的协作...
高并发编程第三阶段23讲 Semaphore工具的介绍以及借助于Semaphore构造一个Lock_.mp4 高并发编程第三阶段24讲 Semaphore工具API详细介绍-上_.mp4 高并发编程第三阶段25讲 Semaphore工具API详细介绍-下_.mp4 ...
并发工具类CountDownLatch详解.mp4 并发工具类CyclicBarrier 详解.mp4 并发工具类Semaphore详解.mp4 并发工具类Exchanger详解.mp4 CountDownLatch,CyclicBarrier,Semaphore源码解析.mp4 提前完成任务之FutureTask...
python也提供了线程相关的并发原语,如锁threading.Lock,事件threading.Event,条件变量threading.Condition,信号量 threading.Semaphore. 其实这些Python对象本质上都是对pthread_mutex_t, pthread_condition_t的...
4、线程间的协调手段:lock、condition、wait、notify、notifyAll☆☆☆ 5、Lock-free: atomic、concurrentMap.putIfAbsent、CopyOnWriteArrayList☆☆☆ 6、关于锁使用的经验介绍 7、并发流程控制手段:...
4、线程间的协调手段:lock、condition、wait、notify、notifyAll ☆ ☆ ☆ 5、Lock-free: atomic、concurrentMap.putIfAbsent、CopyOnWriteArrayList ☆ ☆ ☆ 6、关于锁使用的经验介绍 7、并发流程控制手段:...
4、线程间的协调手段:lock、condition、wait、notify、notifyAll☆☆☆ 5、Lock-free: atomic、concurrentMap.putIfAbsent、CopyOnWriteArrayList☆☆☆ 6、关于锁使用的经验介绍 7、并发流程控制手段:...
第2节理解多线程与并发的之间的联系与区别 [免费观看] 00:11:59分钟 | 第3节解析多线程与多进程的联系以及上下文切换所导致资源浪费问题 [免费观看] 00:13:03分钟 | 第4节学习并发的四个阶段并推荐学习并发的资料 ...
第2节理解多线程与并发的之间的联系与区别 [免费观看] 00:11:59分钟 | 第3节解析多线程与多进程的联系以及上下文切换所导致资源浪费问题 [免费观看] 00:13:03分钟 | 第4节学习并发的四个阶段并推荐学习并发的资料 ...
多线程编程的核心思想 多线程编程的核心思想是指在多线程环境下如何实现线程安全、...多线程编程的核心思想是通过 Lock 和 Condition 接口来实现线程安全和同步机制,并使用 AQS 底层实现来实现锁和 Condition 接口。
Lock锁,一种线程同步机制,其主要功能是防止多个线程同时访问同一代码块,从而避免因并发问题引发的数据不一致或其他错误。Lock锁的灵活性相比synchronized更高,它支持手动获取和释放锁,能够中断的获取锁以及超时...
第2节理解多线程与并发的之间的联系与区别 [免费观看] 00:11:59分钟 | 第3节解析多线程与多进程的联系以及上下文切换所导致资源浪费问题 [免费观看] 00:13:03分钟 | 第4节学习并发的四个阶段并推荐学习并发的资料 ...
全书分为9章,涵盖了线程管理、线程同步、线程执行器、Fork/Join框架、并发集合、定制并发类、测试并发应用等内容。全书通过60多个简单而非常有效的实例,帮助读者快速掌握Java 7多线程应用程序的开发技术。学习完...
书中从并发性和线程安全性的基本概念出发,介绍了如何使用类库提供的基本并发构建块,用于避免并发危险、构造线程安全的类及验证线程安全的规则,如何将小的线程安全类组合成更大的线程安全类,如何利用线程来提高...