(1)作用
我们通常要使用线程来执行任务,任务通过Runnable定义,然后new 一个Thread来进行执行。
假如我们要改变一个Thread的名称,那么我们可以在new Thread的时候设置名称
那么如果我们需要对多个线程 都改名,难道每次new都要定义吗?
实际上我们可以通过ThreadFactory来专门生成Thread,对于Thread的属性我们可以在其中进行统一定义
(2)实例
public class ThreadFactoryTest {
@Test
public void test() {
MyThreadFactory factory = new MyThreadFactory();
for (int i=0; i<3; i++) {
factory.newThread(new MyTask()).start();
}
}
}
class MyTask implements Runnable{
public void run() {
System.out.println(Thread.currentThread().getName());
}
}
class MyThreadFactory implements ThreadFactory{
private AtomicInteger index = new AtomicInteger(0);
public Thread newThread(Runnable r) {
Thread thread = new Thread(r, "myThread"+index.getAndIncrement());
return thread;
}
}
结果为:
myThread0
myThread1
myThread2
(3)说明
1.如果需要新的线程,我们直接通过newThread方法即可
2.这是单独使用,也可以配合线程池使用,这样线程池中的所有线程都是我们定义的
ExecutorService executor = Executors.newFixedThreadPool(3, new MyThreadFactory());
for (int i = 0; i < 5; i++) {
executor.submit(new MyTask());
}