首页 > 代码库 > Java使用ThreadFactory来创建新的线程
Java使用ThreadFactory来创建新的线程
首先来构建线程封装类WorkThread,该类的功能主要是为了能够更好的管理线程而创建的
public class WorkThread extends Thread { private Runnable target; //线程执行目标 private AtomicInteger counter; public WorkThread(Runnable target, AtomicInteger counter) { this.target = target; this.counter = counter; } @Override public void run() { try { target.run(); } finally { int c = counter.getAndDecrement(); System.out.println("terminate no " + c + " Threads"); } } }
其次,来定义一个测试目标
public class WorkRunnable implements Runnable { @Override public void run() { System.out.println("complete a task"); } }
实现线程工厂的方法
public class WorkThreadFactory implements ThreadFactory{ private AtomicInteger atomicInteger = new AtomicInteger(0); @Override public Thread newThread(Runnable r) { int c = atomicInteger.incrementAndGet(); System.out.println("create no " + c + " Threads"); return new WorkThread(r, atomicInteger);//通过计数器,可以更好的管理线程 } }
测试线程工厂
public class TestThreadFactory { public static void main(String[] args) { //创建线程(并发)池,自动伸缩(自动条件线程池大小) ExecutorService es = Executors.newCachedThreadPool(new WorkThreadFactory()); //同时并发5个工作线程 es.execute(new WorkRunnable()); es.execute(new WorkRunnable()); es.execute(new WorkRunnable()); es.execute(new WorkRunnable()); es.execute(new WorkRunnable()); //指示当所有线程执行完毕后关闭线程池和工作线程,如果不调用此方法,jvm不会自动关闭 es.shutdown(); try { //等待线程执行完毕,不能超过2*60秒,配合shutDown es.awaitTermination(2*60, TimeUnit.SECONDS); } catch (InterruptedException e) { e.printStackTrace(); } } }
Java使用ThreadFactory来创建新的线程
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。