50-案例实现
案例实现
根据以下步骤来完成本案例。
1.创建一个名为 MyThreadFactory
的类,并实现 ThreadFactory
接口:
public class MyThreadFactory implements ThreadFactory {
2.声明3个属性:一个整型变量 counter
用于存储线程对象的创建数;一个字符串变量 name
,用于存储每个新建线程的基础名称;一个字符串列表 stats
,用于存储线程对象创建过程的统计信息。在构造器中初始化这些属性:
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
接口,并为 Runnable
接口返回一个线程对象。本案例将为线程对象生成名称,创建新的线程对象并保存统计信息:
@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;
}
4.实现 getStats()
方法。该方法返回一个 String
对象——其包含创建的所有线程对象的统计数据:
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
接口。在本案例中,这些任务将休眠1s,除此之外,不会做任何事情:
public class Task implements Runnable {
@Override
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 thread;
System.out.printf("Starting the Threads\n");
for (int i=0; i<10; i++){
thread=factory.newThread(task);
thread.start();
}
9.向控制台中输出线程工厂的统计信息:
System.out.printf("Factory stats:\n");
System.out.printf("%s\n",factory.getStats());
10.运行案例并查看结果。