zoukankan      html  css  js  c++  java
  • java高级工程师多线程并发

    • 线程池(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;

                }

    }

  • 相关阅读:
    八数码难题 (codevs 1225)题解
    小木棍 (codevs 3498)题解
    sliding windows (poj 2823) 题解
    集合删数 (vijos 1545) 题解
    合并果子 (codevs 1063) 题解
    等价表达式 (codevs 1107)题解
    生理周期 (poj 1006) 题解
    区间 (vijos 1439) 题解
    区间覆盖问题 题解
    种树 (codevs 1653) 题解
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3043277.html
Copyright © 2011-2022 走看看