多线程并发库
Posted Java ..
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程并发库相关的知识,希望对你有一定的参考价值。
x.ThreadLocal单个线程范围内的共享变量
应用比如,struts的Action对象的共享变量request,session...等等。
巧妙的单例设计ThreadLocal线程共享变量对象ThreadLocalDto
12.读写锁
a.读写锁可以实现读读同步,读写互斥,写写互斥。
应用比如,队列Queue中的一份数据data,多个线程同时读和写。
b.基于多线程的并发缓存系统
1 public class CacheDemo{
2 private HashMap<String,Object> cache=new HashMap<String,Object>();
3 private ReadWriteLock rwl=new ReenTrantReadWriteLock();
4 public Object getData(String key){
5 rwl.readLock().lock();
6 Object value=null;
7 try{
8 value=cache.get(key);
9 if(value==null){
10 rwl.readLock().unlock();
11 rwl.writeLock().lock();
12 try{
13 //
14 if(value==null){
15 value=userSql.query(key);
16 cache.put(key,value);
17 }
18 }finally{
19 rwl.writeLock().lock();
20 }
21 rwl.readLock().lock();
22 }
23 }finally{
24 rwl.readLock().unlock();
25 }
26 return value;
27 }
28 }
13.condition可以实现多路通信,多路的指定叫醒,比如老大叫醒老二,老二叫醒老三,老三叫醒老大。wait()和notify()和while无法实现两路以上指定叫醒。
a.高级应用,阻塞队列。多(单)个线程put(),多(单)个线程take()(需要两路的指定叫醒,可以用一个condition实现或者wait,notify实现,此处用的是两个condition,可以减少唤醒消耗(需要唤醒的wait池对象相对大大减少))。
以上是关于多线程并发库的主要内容,如果未能解决你的问题,请参考以下文章