首页 > 代码库 > 使用工厂类创建线程
使用工厂类创建线程
工厂模式是我们常用的模式之一。它是一个创建者模式,使用一个类为其他的或者多个类创建对象。当我们要为这些类创建对象时,不需要在使用new构造器。
使用工厂类,可以将对象的创建集中化。
下面这个例子,我们使用ThreadFactory接口来创建对象,用来生成个性化名称的线程并且保存这些线程对象的统计信息。
1.创建名为MyThreadFactory的类,并且实现ThreadFactory接口。
public class MyThreadFactory implements ThreadFactory{public class MyThreadFactory implements ThreadFactory}
2.声明三个属性。整型数字counter,用来存储线程对象的数量;字符串name,用来存放每个线程名称;字符串列表stats,用来存放线程对象的统计数据。同时实现带参数的构造器初始化这3个属性。
private int counter;
private String name;
private List<String>stats;
public MyThreadFactory(String name) {
counter=0;
this.name = name;
stats=new ArrayList<String>();
}
3.实现newThread()方法。这个方法以Runnable接口对象为参数。并且返回参数对应的线程对象。我们创建一个线程并且生成线程名称,保存统计数据。
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;
}
4.实现getStas()方法,返回一个字符串对象。用来表示所有线程对象的统计数据。
public String getStats(){
StringBuffer buffer=new StringBuffer();
Iterator<String> it=stats.iterator();
while(it.hasNext()){
buffer.append(it.next());
buffer.append("\n");
}
return buffer.toString();
}
5.创建名为Task的类并且实现Runnable接口。我们这里,线程除了只休眠1秒,,不做任何事情。
public class Task implements Runnable{
public void run(){
try{
TimeUnit.SECONDS.sleep(1);
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
6.创建主类Main,包含main()方法。
public class Main {
public static void main(String[] args){}}
7.创建一个MyThreadFactory对象,创建一个Task对象。
MyThreadFactory factory=new MyThreadFactory("MyThreadFactory");
Task task=new Task();
8.使用工厂类MyThreadFactory创建10个对象线程,并且启动。
Thread thread;
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());
}
10.运行结果。
Starting the Threads
Factory stats:
Created thread 9 with name MyThreadFactory-Thread_0 on Thu Dec 11 21:02:42 CST 2014
Created thread 10 with name MyThreadFactory-Thread_1 on Thu Dec 11 21:02:42 CST 2014
Created thread 11 with name MyThreadFactory-Thread_2 on Thu Dec 11 21:02:42 CST 2014
Created thread 12 with name MyThreadFactory-Thread_3 on Thu Dec 11 21:02:42 CST 2014
Created thread 13 with name MyThreadFactory-Thread_4 on Thu Dec 11 21:02:42 CST 2014
Created thread 14 with name MyThreadFactory-Thread_5 on Thu Dec 11 21:02:42 CST 2014
Created thread 15 with name MyThreadFactory-Thread_6 on Thu Dec 11 21:02:42 CST 2014
Created thread 16 with name MyThreadFactory-Thread_7 on Thu Dec 11 21:02:42 CST 2014
Created thread 17 with name MyThreadFactory-Thread_8 on Thu Dec 11 21:02:42 CST 2014
Created thread 18 with name MyThreadFactory-Thread_9 on Thu Dec 11 21:02:42 CST 2014
使用工厂类创建线程