java高级工程师--------多线程并发
2013-04-25 19:43
141 查看
线程池(java5中)
ExecutorService threadPool =Executors.newFixedThreadPool(3);//创建固定大小的线程池
ExecutorService threadPool=Executors.newCachedThreadPool();//创建缓存线程池,动态变化线程数量,一段时间之后销毁未使用的线程
ExecutorService threadPool=Executors.newSingleThreadExecutor();//创建单一线程,当线程死掉之后立马启动替补线程
lock condition 实现线程同步通信
lock类似于synchronized,但是比synchronize更加面向对象化
使用: Lock lock=new Reentranlock();
lock.lock(); lock.unlock();
读写锁的应用ReadWriteLock rwl=new ReentrantReadWriteLock();
缓存系统的实现-------
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){//多个线程都走到rml.writeLock().lock()时,一个线程写入成功之后,则此时后面线程再到这一步时的判断缓存中是否有数据
value="aaa";
}
}
finally{
rwl.writeLock().lock();
}
rwl.readLock().lock();
}
}
finally{
rwl.readLock().unlock();
}
return value;
}
}
ExecutorService threadPool =Executors.newFixedThreadPool(3);//创建固定大小的线程池
ExecutorService threadPool=Executors.newCachedThreadPool();//创建缓存线程池,动态变化线程数量,一段时间之后销毁未使用的线程
ExecutorService threadPool=Executors.newSingleThreadExecutor();//创建单一线程,当线程死掉之后立马启动替补线程
lock condition 实现线程同步通信
lock类似于synchronized,但是比synchronize更加面向对象化
使用: Lock lock=new Reentranlock();
lock.lock(); lock.unlock();
读写锁的应用ReadWriteLock rwl=new ReentrantReadWriteLock();
缓存系统的实现-------
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){//多个线程都走到rml.writeLock().lock()时,一个线程写入成功之后,则此时后面线程再到这一步时的判断缓存中是否有数据
value="aaa";
}
}
finally{
rwl.writeLock().lock();
}
rwl.readLock().lock();
}
}
finally{
rwl.readLock().unlock();
}
return value;
}
}
相关文章推荐
- java高级工程师--------多线程并发
- java高级工程师------struts的知识重点
- java高级工程师面试问题集结号(two)
- java高级工程师
- 高级java工程师笔试题
- 6月26日云栖精选夜读:成为一名Java高级工程师你需要学什么
- 招聘SharePoint中级工程师、Java高级工程师,有需求的朋友请进来。
- jvm系列(八):jvm知识点总览-高级Java工程师面试必备
- 面试总结 —— 高级JAVA工程师
- Java高级开发工程师高薪聘请
- Java高级工程师常见面试题
- java 高级工程师要求
- java高级工程师面试最可能会遇到的问题面试题
- 面试总结 —— 高级JAVA工程师
- JAVA高级工程师课程笔记整理——(十二)jquery和ajax
- 风林火山高级java工程师面试题
- 成为一名Java高级工程师你需要学什么