- 浏览: 515605 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (268)
- C/C++ (5)
- LUA (0)
- JVM (6)
- UML (1)
- J2SE (43)
- J2EE (15)
- EXTJS (1)
- HTML5 (47)
- ANDROID (2)
- JAVASCRIPT (51)
- WEB SERVICES (0)
- 数据库 (2)
- 数据结构 (0)
- 应用服务器 (11)
- 设计模式应用 (0)
- JAVA性能与缓存 (1)
- ByteCode (5)
- RCP (0)
- Plugin (0)
- Eclipse (3)
- 程序人生 (14)
- Mobile (2)
- Linux/Ubuntu (31)
- sublime (2)
- python (15)
- Git (5)
- NodeJs (3)
- Crosswalk (1)
- Browserify (1)
- Backbone (1)
最新评论
锁妙用:
读写锁:分为读锁和写锁,多个读锁不能互斥,读锁与写锁互斥,写锁与写锁互斥,这是由JVM自己控制的,只要上好相应的锁即可,如果你的代码只读数据,可以多人同时读,但不能同时写,那就上读锁;如果要修改数据,只能有一个人在写,且不能同时读取,那就上写锁,总之,读的时候上读锁,写的时候上写锁.
如使用readLock与writeLock实现缓存
public class CacheDemo { private Map<String, Object> cache = new HashMap<String, Object>(); private ReadWriteLock rwl = new ReentrantReadWriteLock(); public Object getData(String key){ rwl.readLock().lock(); Object value = null; try{ value = cache.get(key); if(value == null){ rwl.readLock().unlock(); rwl.writeLock().lock(); try{ if(value==null){ value = "aaaa";// queryDB(); } }finally{ rwl.writeLock().unlock(); } rwl.readLock().lock(); } }finally{ rwl.readLock().unlock(); } return value; } }
发表评论
文章已被作者锁定,不允许评论。
-
关于Thread.IsAlive属性
2015-07-04 12:12 882今天在讨论多线程的时候,谈到了这个属性。IsAlive,顾名 ... -
Java:对象的强、软、弱和虚引用
2015-02-28 11:00 731文章源自:http://zhangjunhd.blog.51 ... -
一个通用并发对象池的实现
2015-01-20 09:32 733Source: http://ifeve.com/gener ... -
如何创建不可变的Java类或对象
2015-01-07 16:29 2183在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过 ... -
并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
2014-12-29 11:49 802文章源自:http://www.cnblogs.com/li ... -
中断线程深入
2014-12-25 15:18 795本文转自http://jiangzhengjun.itey ... -
深入java.lang.ThreadLocal类
2014-12-24 16:50 707文章源自:http://lavasoft.blog.51c ... -
Java 8新特性探究(3):解开lambda最强作用的神秘面纱
2014-07-10 17:50 710文章源自:http://developer.51cto.co ... -
Java 8特性探究(2):深入解析默认方法
2014-07-08 11:12 782文章源自:http://develop ... -
Java 8特性探究(1):通往lambda之路_语法篇
2014-07-08 09:59 690文章源自:http://developer.51cto.c ... -
java文件复制方法参考
2013-12-02 14:17 730最快的文件复制方法 private static ... -
用Java数字签名提供XML安全
2013-11-29 16:11 13134文章源自:http://www. ... -
深入理解HashMap的工作原理
2013-11-18 15:49 823HashMap的工作原理是近 ... -
JDBC4.0 驱动加载过程
2013-01-16 10:09 3634注意,jdbc4.0不再需要显示调用class.fo ... -
Java自定义的类加载器
2013-01-15 08:38 1014一、类加载器类别 * 1.java虚拟机自带的加载器 ... -
使用Log4j生成不同日志级别的日志文件
2012-12-26 17:09 5331在src根目录下存放log4j.xml文件,具体配置如下(测试 ... -
深入理解HashMap
2012-12-13 10:08 864文章摘自:http://www.iteye.c ... -
java字节码加解密
2012-06-30 09:53 1095一.创建KEY class Key { ... -
java动态代理简单实现
2012-06-30 09:45 1025一.接口 public interface Foo { ... -
线程池简单实现
2012-06-25 11:42 1096其实线程池的实现就是生产者消费者问题 的实现,理解了生产者消 ...
相关推荐
使用ReadWriteLock与使用Lock接口的基本流程相似,需要分别获取读锁和写锁。以下是一个简单的例子: ```java public class Client { public static void main(String[] args) throws InterruptedException { ...
ReentrantReadWriteLock.ReadLock ReentrantReadWriteLock.WriteLock 隐式锁(内置锁) Synchronized 问题 死锁 性能 线程活跃与线程饥饿 同步工具类 原子操作类 AtomicInteger等 相当于加上...
例如,实现一个允许多读一写的缓存,可以使用`ReentrantReadWriteLock`: ```java ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); ... lock.readLock().lock(); // 读操作 try { // 读取操作 ...
private Lock r = readWriteLock.readLock(); private Lock w = readWriteLock.writeLock(); // 读操作 public Data get(String key) { r.lock(); try { // 业务逻辑 } finally { r.unlock(); } } // 写操作...
lock.readLock().unlock(); } } } ``` #### 2. 寻找二叉树中两个节点的最近公共祖先 **知识点概述:** 对于一个包含一亿节点的树,寻找两个给定节点的最近公共祖先。 **详细解析:** 寻找二叉树中两个节点的...
例如,`readLock()`返回的`Sync`子类`NonReentrantReadLock`实现了读锁的逻辑,而`writeLock()`返回的`Sync`子类`NonReentrantWriteLock`实现了写锁的逻辑。 - `acquireShared`和`releaseShared`方法中包含了读锁的...
`ReentrantReadWriteLock`由两部分组成:`ReadLock`和`WriteLock`。每个部分都是一个独立的锁,可以被单独获取和释放。 - **ReadLock**:多个线程可以同时持有读锁,实现读操作的并发。只要没有线程持有写锁,就...
具体实现时,可以创建一个`ReadWriteLock`实例,读操作使用`readLock()`,写操作使用`writeLock()`。这样,多个读操作可以并发进行,而写操作会阻塞所有其他读写操作,直到写操作完成。 2. **Lock接口的优势** ...
使用`Thread.join()`方法可以轻松地实现线程间的顺序执行,而`Lock`接口则提供了更高级别的锁控制机制,尤其是对于需要更复杂锁定逻辑的应用场景,如实现高效缓存时,`ReadWriteLock`提供了很好的解决方案。...
lock.readLock().unlock(); } } public void put(K key, V value) { lock.writeLock().lock(); try { cache.put(key, value); } finally { lock.writeLock().unlock(); } } } ``` #### 题目三:`wait()...
`Mutex`类通常会有`lock()`、`unlock()`方法,而`ReadWriteLock`类会有`readLock()`、`writeLock()`等方法供线程获取读锁或写锁。使用这些类,开发者可以方便地在代码中实现多线程环境下的资源共享和同步。 在实际...
其中,`readLock()`和`writeLock()`方法分别用于获取读锁和写锁,它们使用CAS操作来保证线程安全。在读锁的实现中,ReentrantReadWriteLock支持读锁的重入,而写锁同样支持重入,但写锁具有更高的优先级,即使有多个...
- `ReadLock`和`WriteLock`类:这两个内部类分别代表读锁和写锁,它们实现了`Lock`接口。在实际操作中,这两个类会根据读写锁的规则来控制对共享资源的访问。 3. **读写锁工作原理**: - **读锁(共享锁)**:...
在Java的`java.util.concurrent.locks`包中,除了ReentrantLock,还有其他类型的锁,如ReadWriteLock(读写锁),它包含WriteLock和ReadLock两个部分,分别控制写操作和读操作。这样,多个读线程可以同时访问资源,...
- `readLock()`: 获取读锁。 - `writeLock()`: 获取写锁。 - `tryReadLock()`, `tryWriteLock()`: 尝试获取读写锁,不会阻塞。 - `unlock()`: 释放锁。 二、StampedLock(标记锁) 1. **简介**: StampedLock...
Java的`ReentrantReadWriteLock`提供了可重入的读写锁功能,包括`ReadLock`和`WriteLock`接口,它们分别用于读取和写入操作。开发者可以通过调用`lock()`和`unlock()`方法来获取和释放锁。 6. **C++中的std::...
- **readLock()**:获取读锁。 - **writeLock()**:获取写锁。 - **unlock()**:释放锁。 #### 四、线程池源码分析 - **核心组件**: - **ExecutorService**:提供了一个高级接口来创建和管理线程。 - **...
- **读写锁**: 除了ReentrantLock,Java还提供了ReadWriteLock接口,它包含两个Lock对象:一个用于读操作(ReadLock),允许多个线程同时读取共享资源;另一个用于写操作(WriteLock),一次只允许一个线程写入。...