工厂模式是面向对象编程中最常用的模式之一,它是一个创建者模式,使用一个类为其他的一个或者多个类创建对象。使用工厂类,可以 将对象的创建集中化,这样做的好处有:1) 更容易修改类,或者改变创建对象的方式。 2) 更容易为有限资源限制创建对象的数目。3) 更容易为生成的对象生成数据统计。
Java提供了ThreadFactory接口,这个接口实现了线程对象工厂。
1.创建一个实现ThreadFactory接口的MyThreadFactory类
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.ThreadFactory;
public class MyThreadFactory implements ThreadFactory{
// 将必要数据存储进工厂所涉及的属性
private int counter;
private String name;
private List<String> stats;
/**
* 构造器
*/
public MyThreadFactory(String name){
counter=0;
this.name=name;
stats=new ArrayList<String>();
}
/**
*复写newThread方法
*/
@Override
public Thread newThread(Runnable r) {
// 创建一个线程
Thread t=new Thread(r,name+"-Thread_"+counter);
counter++;
// 添加统计数据
stats.add(String.format("Created thread %d with name %s on %s\n",t.getId(),t.getName(),new Date()));
return t;
}
/**
*返回线程工厂中的数据
*/
public String getStats(){
StringBuffer buffer=new StringBuffer();
Iterator<String> it=stats.iterator(); //迭代
while (it.hasNext()) {
buffer.append(it.next());
}
return buffer.toString();
}
}
2.创建一个实现Runnable接口的Task类,在run方法中使线程休眠1秒
import java.util.concurrent.TimeUnit;
public class Task implements Runnable{
@Override
public void run() {
// 休眠1秒
try
{
TimeUnit.SECONDS.sleep(1);
}catch(InterruptedException e)
{
}
}
}
3.主类的实现
public class Main {
public static void main(String[] args) {
// 创建工厂
MyThreadFactory factory=new MyThreadFactory("MyThreadFactory");
// 创建Task的实例对象
Task task=new Task();
Thread thread;
// 创建10个线程并启动它们
System.out.printf("Starting the Threads\n");
for (int i=0; i<10; i++){
thread=factory.newThread(task);
thread.start();
}
// 打印线程 工厂的统计数据到控制台
System.out.printf("Factory stats:\n");
System.out.printf("%s\n",factory.getStats());
}
}
4.运行结果