线程池

  • 线程池
  • 七个参数
    BlockingQueue workQueue=new ArrayBlockingQueue(10);//最多存放10个任务
    ThreadFactory threadFactory= Executors.defaultThreadFactory();
    //回抛出异常的回绝策略
    RejectedExecutionHandler reh=new ThreadPoolExecutor.AbortPolicy();
    ExecutorService es = new ThreadPoolExecutor(5,10,300L,TimeUnit.MILLISECONDS,workQueue,threadFactory,reh);
    //线程池管理线程对象 es线程池对象可以接受线程任务
  1. 核心参数
  2. 最大线程数
  3. 存活时间
  4. 时间单位
  5. 工作(任务队列)
  6. 线程工厂
  7. 拒绝策略
  • Java线程池中有两种提交任务的方式:execute()和submit()。这两种方式的主要区别如下:
    1. 任务类型:execute()方法只能接收Runnable类型的参数,而submit()方法可以接收Runnable和Callable两种类型的参数。
    2. 返回值:execute()方法没有返回值,而submit()方法提交任务后会有一个Future类型的返回值。当任务类型为Runnable时,返回值为null。
    3. 异常处理:execute()在执行任务时,如果遇到异常会直接抛出。而submit()不会直接抛出异常,只有在使用Future的get方法获取返回值时,才会抛出异常。
  • 线程池的工作流程
    1. 如果存活线程数超过核心线程数量,当有些线程空闲后,没有任何的工作任务,就会等待最大存活时间;
    2. 如果超过最大存活时间依然没有任务产生,线程池就会消亡此线程,直到存活线程数量达到核心线程数量;
    3. 如果存活的线程数量达到线程池最大线程数量,并且所有的线程都在工作,现在添加新的工作任务;
  • 四种回绝策略
  1. 抛出异常;
  2. 抛异常并记录日志;
  3. 静默放弃当前任务(不抛异常,不做任何的处理);
  4. 放弃掉队列中最老的任务,将当前任务加入到队列中;
  • 线程同步
  1. synchronized同步锁 ,可重入的;
  2. lock(可以实现公平锁和非公平锁) 
      static Lock lock=new ReentrantLock();
        public static void easy(){
            lock.lock();//使用锁
            System.out.println("----start---"+Thread.currentThread().getName()+"-----");
            try{
                Thread.sleep(1000);
            }catch (InterruptedException e){
                e.printStackTrace();
            }
            System.out.println("----end---"+Thread.currentThread().getName()+"-----");
            lock.unlock();//解锁
        }
  3. ReadWriteLock
        static ReadWriteLock rwLock=new ReentrantReadWriteLock();
        //ReadWriteLock这个对象管理两把锁 read锁(共享锁) write锁(独占锁)
        public static void  easy1(){
            Lock rlock = rwLock.readLock();
            System.out.println(rlock);
            rlock.lock();//加读锁
            System.out.println("---read---"+Thread.currentThread().getName()+"-----start");
            System.out.println();
        }

     

  4. lock.tryLock() 尝试获得锁对象
posted @ 2024-01-05 15:18  卡皮巴拉  阅读(6)  评论(0编辑  收藏  举报