Java使用ThreadFactory来创建新的线程
来源:互联网 发布:新网互联域名登录 编辑:程序博客网 时间:2024/06/01 13:54
首先来构建线程封装类WorkThread,该类的功能主要是为了能够更好的管理线程而创建的
package com.bird.concursey;
import java.util.concurrent.atomic.AtomicInteger;
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");
}
}
}
其次,来定义一个测试目标
package com.bird.concursey;
public class WorkRunnable implements Runnable
{
@Override
public void run() {
System.out.println("complete a task");
}
}
实现线程工厂的方法
package com.bird.concursey;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;
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);//通过计数器,可以更好的管理线程
}
}
测试线程工厂
package com.bird.concursey;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
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来创建新的线程
- 使用java.util.concurrent.ThreadFactory来创建线程
- 使用java.util.concurrent.ThreadFactory来创建线程
- Java并发编程-05-使用ThreadFactory创建新线程
- 使用java.util.concurrent.ThreadFactory类创建线程
- ThreadFactory, ExecutorService的简单使用
- Java线程(五):Executors、ThreadFactory
- 创建新线程来存放子类项目
- 线程池ThreadPoolExecutor的使用和有关ThreadFactory和thread等粗解
- Java多线程之~~~使用ThreadPoolExecutor来创建线程
- Java学习笔记---------如何使用Runnable接口来创建线程???
- Java多线程之-----实现自己的ThreadFactory
- Java多线程之-----实现自己的ThreadFactory
- 使用新的java线程池技术创建固定的线程去完成任务,都完成后计算总时间
- Thinking in Java学习笔记Daemon线程和ThreadFactory接口
- 线程工厂 ThreadFactory
- 线程工程ThreadFactory
- 根据内核来创建线程--SetThreadAffinityMask函数的使用
- mysql常用函数
- 数据库的简单查询和连接查询
- C++类之const
- Django笔记 解决找不到vcvarsall.bat的错误
- 你会写“atoi”吗???
- Java使用ThreadFactory来创建新的线程
- 回传值
- 使用mybatis的两种方式
- 通讯录的录入与显示
- 深入学习java并发编程:阻塞队列
- 基于R语言的文本挖掘技术
- Java IO - FileReader&FileWriter
- oracle trunc()函数的使用方法
- windows下 PyCharm安装scrapy