java thread 创建_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();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值