1、缓存线程池
创建一个缓存线程池,此方法不会对线程数量进行限制,jvm能创建多少就是用多少。线程可复用。
public static void main (String args[]) throws InterruptedException { ExecutorService executorService = Executors.newCachedThreadPool(); for(int i = 0 ; i < 10 ; i ++){ final int num = i; Thread.sleep(i*1000); executorService.execute(new Runnable() { @Override public void run() { System.out.println(num); } }); } }
2、定长线程池
创建一个固定数量的线程池。
public static void main (String args[]) throws InterruptedException { ExecutorService executorService = Executors.newFixedThreadPool(2); for(int i = 0 ; i < 10 ; i ++){ final int num = i ; executorService.execute(new Runnable() { @Override public void run() { System.out.println(num); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } }); } executorService.shutdown(); }
3、定长循环执行的线程
public static void main (String args[]){ ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(5); scheduledExecutorService.scheduleAtFixedRate(new Runnable() { @Override public void run() { System.out.println("延迟1秒后每2秒执行一次"); } },1,2, TimeUnit.SECONDS); }
4、单线程线程池
public static void main (String args[]){ ExecutorService executorService = Executors.newSingleThreadExecutor(); for(int i = 0 ; i < 10 ; i ++){ final int num = i; executorService.execute(new Runnable() { @Override public void run() { System.out.println(num); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }); } }