下面的代码说明的是线程池中的方法的实现的方式
package lt.test01; import java.util.Random; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class DemoThreadPool { public static void main(String[] args){ //ExecutorService es = Executors.newFixedThreadPool(5);//一池5线程 ExecutorService es = Executors.newCachedThreadPool();//自动创建所需要的线程池 //ExecutorService es = Executors.newSingleThreadExecutor(); Future<Integer> result = null; try { for (int i = 1; i <= 20000; i++) { result = es.submit(new Callable<Integer>() { @Override public Integer call() throws Exception { Thread.sleep(20); System.out.print(Thread.currentThread().getName()+"\t\n"); return new Random().nextInt(5); } }); System.out.print("当前的使用次数是:"+i+"\n"); } }catch (Exception e){ e.printStackTrace(); }finally { es.shutdown(); } } }
下面的代码说名的是实现的是线程的时间化的管理
package lt.test01; import java.util.Random; import java.util.concurrent.*; public class PoolThreadTest1 { public static void main(String[] args){ ScheduledExecutorService service = Executors.newScheduledThreadPool(5); ScheduledFuture<Integer> result = null; try { for (int i = 1; i <= 20 ; i++) { /** * 需要注意的地方是 * 实现的callable的接口 * 然后接口中的类型和上面的类型要定义的一致 * 要不然会产生错误 */ result = service.schedule(new Callable<Integer>() { @Override public Integer call() throws Exception { System.out.print(Thread.currentThread().getName()+"\t\n"); return new Random().nextInt(5); } },2,TimeUnit.SECONDS); System.out.print("*** \t"+result+"\n"); } }catch (Exception e){ e.printStackTrace(); }finally { service.shutdown(); } } }