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;

                }

    }

  • 相关阅读:
    ps_基于2020的官方教程
    杂记_好玩的
    linux _文件目录与权限
    levelDb笔记
    《好学的C++ 第2版》 第9章 一些高级编程技术
    《好学的C++ 第2版》 第8章 文件-电子存储
    《好学的C++ 第2版》 第7章 字符串--分析文本
    《好学的C++ 第2版》 第6章 指针--我知道数据在哪里
    《好学的C++ 第2版》 第5章 数组--都给我排好队
    《好学的C++ 第2版》 第4章 函数--分工与合作
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3043277.html
Copyright © 2011-2022 走看看