3个线程的线程池提交10个任务
import java.util.Date; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; public class ThreadPoolTest { public static void main(String[] args) { ExecutorService threadPool =Executors.newFixedThreadPool(3); //ExecutorService threadPool =Executors.newCachedThreadPool();//池子里面的线程数动态变化 //ExecutorService threadPool =Executors.newSingleThreadExecutor();//单个线程池,线程死了会找个替补,保证线程不会挂掉 for(int i=1;i<=10;i++){ final int k=i; threadPool.execute(new Runnable() { @Override public void run() { for (int j=1;j<=10;j++){ try { Thread.sleep(20); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+" looping of "+j+" for task of "+k); } } }); } System.out.println("All of 1o tasks have committed"); threadPool.shutdown();//线程池必须关闭线程才能停止,任务干完了关闭 //threadPool.shutdownNow();//任务没干完也立即关闭 //定时器,调度线程池,10s后执行 Executors.newScheduledThreadPool(3).schedule(new Runnable() { @Override public void run() { System.out.println("bombing!"); } }, 10, TimeUnit.SECONDS); //4s后开炸,然后每隔2s开炸 Executors.newScheduledThreadPool(3).scheduleAtFixedRate(new Runnable() { @Override public void run() { System.out.println("bombing!"); } }, 4,2, TimeUnit.SECONDS); //变相绝对定时,无绝对时间定时 System.err.println(new Date().getTime()-System.currentTimeMillis()); } }
本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1716681