您的位置:首页 > 编程语言 > Java开发

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

2017-11-23 17:00 399 查看
创建线程有几种方式

 创建线程有三种方式:
 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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: