码迷,mamicode.com
首页 > 编程语言 > 详细

使用工厂类创建线程

时间:2015-05-03 19:13:46      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

工厂模式是面向对象编程中最常使用的模式之一。它是一个创建者模式,使用一个类为其他的一个或者多个类创建对象。当我们要为这些类创建对象时,不需再使用new构造器,而使用工厂类。使用工厂类,可以将对象的创建集中化,这样做有以下折好处:

  • 更容易修改类,或者改变创建对象的方式;

  • 更容易为有限资源限制创建对象的数目。例如,我们可以限制一个类型的对象不多于n个;

  • 更容易为创建的对象生成统计数据;

Java提供了ThreadFactory接口,Java并发API的高级工具类也使用了线程工厂创建线程。示例:

package concurrency;

import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;

public class main7 {
    public static void main(String[] args) {
        MyThreadFactory factory = new MyThreadFactory("MyThreadFactory ");
        Task2 task = new Task2();
        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());
    }
}
/*扩展ThreadFactory接口*/
class MyThreadFactory implements ThreadFactory{
    
    private int counter;
    private String name;
    private List<String> stats;
    
    public MyThreadFactory(String name) {
        this.counter = 0;
        this.name = name;
        stats = new ArrayList<String>();
    }
    /*扩展ThreadFactory就必须实现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());
            buffer.append("\n");
        }
        return buffer.toString();
    }
}

class Task2 implements Runnable{
    @Override
    public void run() {
        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

ThreadFactory接口只有一个方法,即newThread,它以Runnable接口对象作为传入参数并且返回一个线程对象。当实现ThreadFactory接口时,必须实现这个方法。大多数基本的线程工厂类只有一行,即:

return new Thread(r);

可以通过增加一些变化来强化实现方法覆盖。

使用工厂类创建线程

标签:

原文地址:http://my.oschina.net/fhd/blog/410055

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!