创建线程有几种方式和Java中常用的线程池

创建线程有几种方式
 创建线程有三种方式:
 a:    

 extends Thread
  class ThreadOne entends Thread{
   @Override
   public void run(){
    ......
   }
  }


  需要创建该线程的位置:
  
ThreadOne t1 = new ThreadOne();
  t1.start();


  
  b:
implements Runnable(国产汽车进口发动机)
  class ThreadTwo implements Runnable{
   @Override
   public void run(){
    ......
   }
  }
  需要创建该线程的位置:
  ThreadTwo t = new ThreadTwo();
  Thread t2 = new Thread(t); //将定义的线程作为参数传入得到线程
  t2.start();
  


 c:
implements Callable<String>---必须结合线程池执行器服务来实现
  class ThreadThree implements Callable<String>{
   @Override
   public String call()throws Exception{
    ......
    return "over";
   }
  }
  然后需要创建线程池执行器服务并提交任务
  ExecutorService es = Executors.newFixedThreadPool(6);//可重用的线程池
         Executors.newCachedThreadPool();//缓存机制的线程池
         Executors.newSingleExecutor();//单一实例的线程执行器
  Future<String> f = es.submit(new ThreadThree());
  //然后视需求决定是否调用自我阻塞办法get()来得到返回结果
  String ok = f.get();
  
  第三种实现Callable接口的方式弥补了原本Runnable接口当中run()的两个不足
  a:  run()方法定义为void方法 所以无法返回结果
  b:  方法没有throws声明所以没法抛出异常
  另外这种方式必须结合线程池执行器服务 利用submit将任务提交给执行器
  如果需要返回的数据 可以得到提交任务后返回的Future对象 然后调用自我阻塞的get()方法[这个方法会
  导致当前线程阻塞]
  最后结束执行器的时候需要调用shutdown()或者shutdownNow()...
  
Java当中常用的线程池:

          //可重用的线程池 其中参数代表预留多少活跃线程
          ExecutorService es = Executors.newFixedThreadPool(3);
          //带缓存机制的线程池 也就是在任务执行结束60秒内线程不消亡
          ExecutorService es = Executors.newCachedThreadPool();
          //单一实例的线程执行器
          ExecutorService es = Executors.newSingleThreadExecutor();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值