博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用工厂类创建线程
阅读量:5862 次
发布时间:2019-06-19

本文共 2218 字,大约阅读时间需要 7 分钟。

  hot3.png

工厂模式是面向对象编程中最常使用的模式之一。它是一个创建者模式,使用一个类为其他的一个或者多个类创建对象。当我们要为这些类创建对象时,不需再使用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
 stats;        public MyThreadFactory(String name) {        this.counter = 0;        this.name = name;        stats = new ArrayList
();    }    /*扩展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
 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);

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

转载于:https://my.oschina.net/fhd/blog/410055

你可能感兴趣的文章