如题,非线程安全的类如何转换成线程安全的类?
有哪些方法,怎么用?线程安全类java
有哪些方法,怎么用?线程安全类java
解决方案 »
- 新型for循环 谁能介绍下
- 新手求助,非常非常感谢
- 请教一个有关注解的扫描问题
- 求Progress进度条实例
- Spring 是定时器执行任务是启用另外单独的线程吗?
- 怎么样ssh框架中配置连接池
- >>知道的朋友请进>>Tomcat 报java.io.EOFException,连接MySql问题出错 ?
- 刚把servlet/jsp学完,准备学struts2,有两本书,大家推荐一下。
- 求Java数据结构和算法(第二版)电子版下载地址
- eclipse中maven项目结构目录的疑问
- 在用Hql作查询时报出这个错误!看不懂啊,新人一个
- java输出,为什么不输出字符,而是输出字符的ASCII码啊,求大神指点迷津
synchronized(锁){
临界区代码
}
对这个问题,好多人可能第一反应就是使用syschronized关键字,诚然应用这个关键字可以解决问题(仍是有条件线程安全的且低效的),但是在无意中看java源码时,看到了另一种更高效的方式—采用lock的方式。在ReentrantReadWriteLock的源码注释中,作者写了这样一段代码:class RWDictionary { private final Map<String, Data> m = new TreeMap<String, Data>(); private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock(); private final Lock r = rwl.readLock(); private final Lock w = rwl.writeLock(); public Data get(String key) { r.lock(); try { return m.get(key); } finally { r.unlock(); } } public String[] allKeys() { r.lock(); try { return m.keySet().toArray(); } finally { r.unlock(); } } public Data put(String key, Data value) { w.lock(); try { return m.put(key, value); } finally { w.unlock(); } } public void clear() { w.lock(); try { m.clear(); } finally { w.unlock(); } } }这段代码同样实现了对TreeMap本来非线程安全的类,包装成了一个线程安全的类,且不存在Collections.SynchronizedMap的put_if_absent问题。http://www.cnblogs.com/weiwelcome0/archive/2012/05/25/2518558.html