java-多线程-线程池
1 package test; 2 3 import java.util.concurrent.ExecutorService; 4 import java.util.concurrent.Executors; 5 6 /* 7 * 程序启动一个新线程成本是比较高的,因为它涉及到要与操作系统进行交互。而使用线程池可以很好的提高性能, 8 * 尤其是当程序中要创建大量生存期很短的线程时,更应该考虑使用线程池。 9 线程池里的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态,等待下一个对象来使用。 10 在JDK5之前,我们必须手动实现自己的线程池,从JDK5开始,Java内置支持线程池 11 12 13 JDK5新增了一个Executors工厂类来产生线程池,有如下几个方法 14 public static ExecutorService newCachedThreadPool() 15 public static ExecutorService newFixedThreadPool(int nThreads) 16 public static ExecutorService newSingleThreadExecutor() 17 这些方法的返回值是ExecutorService对象,该对象表示一个线程池,可以执行Runnable对象或者Callable对象代表的线程。它提供了如下方法 18 Future<?> submit(Runnable task) 19 <T> Future<T> submit(Callable<T> task) 20 案例演示 21 22 创建线程池对象 23 创建Runnable实例 24 提交Runnable实例 25 关闭线程池 26 27 28 29 步骤: 30 1创建一个线程池对象,控制要创建几个线程对象 31 2这种线程池的线程可以执行:Runnable or Callable对象所代表的线程 做一个类实现Runnable 32 * 3 调用如下方法 33 * Future<?> submit(Runnable task) 34 <T> Future<T> submit(Callable<T> task) 35 36 4偏要结束 37 38 * */ 39 40 41 public class Test01{ 42 public static void main(String[] args) { 43 //创建一个线程池对象 44 ExecutorService pool=Executors.newFixedThreadPool(2); 45 46 //可以执行Runnable对象或者Callable对象代表的线程 47 pool.submit(new MyRunnable()); 48 pool.submit(new MyRunnable()); 49 50 //结束线程池 51 pool.shutdown(); 52 } 53 }
1 package test; 2 3 public class MyRunnable implements Runnable{ 4 @Override 5 public void run() { 6 // TODO Auto-generated method stub 7 for(int x=0;x<100;x++){ 8 System.out.println(Thread.currentThread().getName()+": "+x); 9 } 10 } 11 }