当前位置:嗨网首页>书籍在线阅读

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.运行案例并查看结果。