多线程(Multithreading)

  1. 线程池
    1. Executor接口为执行线程池中的任务,ExecutorService接口为管理和控制任务,ExecutorService是Executor的子类。
    2. 为了得到一个Executor对象,可使用Executors类(注意和Executor接口不同)中的两种static方法,newFixedThreadPool(int n)和newCachedThreadPool().
    3. newFixedThreadPool(int n)方法产生一个固定线程个数的线程池,当一个现在执行的任务结束的时候,该线程可以被另外一个任务使用。newCachedThreadPool()方法生成一个线程池按需产生线程,同样可以复用已有的闲置线程。
    4. import java.util.concurrent.*;
      
      public class ExecutorDemo{
      	//产生一个最多有三个线程的固定线程池
      	ExecutorService executor = Executors.newFixedThreadPool(3);
      	
      	//TaskA, TaskB, TaskC分别是三个runnable的类
      	executor.execute(new TaskA());
      	executor.execute(new TaskB());
      	executor.execute(new TaskC());
      	
      	//Executor类型使用完,记得要关闭
      	executor.shutdown();
      }


    5. 线程池用完记得要shutdown();
    6. 可以使用一个技巧,等待所有线程池中线程执行完毕之后再往后执行代码:
      ...
      executor.shutdown();//此时只是通知系统可以关闭线程池,必须等线程池中所有线程执行完毕,才会真正关闭线程。
      
      //只有所有线程执行完毕,这个循环才会跳出
      while(!executor.isTerminated)(){
      }
      
      .....//之后的代码

    7. 可以使用线程池的方式,让所有线程按照想要的顺序进行:
      			ExecutorService executor = Executors.newFixedThreadPool(1);
      			executor.execute(st.new FirstTask());
      			executor.execute(st.new SecondTask());
      			executor.execute(st.new ThirdTask());
      			executor.shutdown();
      这样,让线程池中只有一个线程。那么,一定是先执行FirstTask,执行完毕后再执行SecondTask,最后ThirdTask。用Semaphore类也可以实现这个功能,详见《Carcking the coding interview》5th edition, 16.5
  2. Lock与Condition
    1. condition中的方法sleep()和await(),sleep不会交出lock,await会交出lock
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值