您的位置:首页 > 编程语言 > Java开发

Java 多线程 - 线程 - 工厂类创建线程

2017-09-07 00:00 134 查看

一、概述

工厂模式是面向对象编程中最常使用的模式之一,它是个创建者模式,使用一个类为其他的一个或者多个类创建对象。当我们要为这些类创建对象时,不需再使用 new 构造器,而是使用工厂类。

好处:

1、更容易修改类,或者改变创建对象的方式。

2、更容易为有限资源限制创建对象的数目。如:可以限制一个类型的对象不多于 n 个。

3、更容易为创建的对象生成统计数据。

二、实现

实现 ThreadFactory 接口 :

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.ThreadFactory;

/**
* 实现 ThreadFactory 接口 来 自定义  创建线程的工程类
*/
public class MyThreadFactory implements ThreadFactory{

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
private int counter;
private String name;
private List<String> stas; // 存放线程对象的 统计性数字

public MyThreadFactory(String name) {
counter = 0;
this.name = name;
stas = new ArrayList<String>();
}

@Override
public Thread newThread(Runnable r) {
Thread thread = new Thread(r, name+"-thread-"+counter);
counter++;
stas.add("线程:id-"+thread.getId()+",name:" + thread.getName() + "," + sdf.format(new Date()) + "被创建...");
return thread;
}

//表示所有的数据
public void getStas(){
if(stas == null || stas.size() == 0){
System.out.println("未进行线程创建操作..");
return;
}
for(String s : stas){
System.out.println(s);
}
}
}

import java.util.concurrent.TimeUnit;

public class PrintTask implements Runnable{

public void run() {
try {
System.out.println(Thread.currentThread().getName() +"- 任务 test");
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

}

public class MyThreadFactoryTest {

public static void main(String[] args) {
PrintTask printTask = new PrintTask();
MyThreadFactory myThreadFactory = new MyThreadFactory("myThreadFactory");
for(int i=0;i<3;i++){
Thread thread = myThreadFactory.newThread(printTask);
thread.start();
try {
thread.join(); // 主线程 等待 子线程完成后继续.
} catch (InterruptedException e) {
e.printStackTrace();
}
}
myThreadFactory.getStas();
System.out.println(Thread.currentThread().getName() + " -> 结束..");
}

}

//console 结果:
myThreadFactory-thread-0- 任务 test
myThreadFactory-thread-1- 任务 test
myThreadFactory-thread-2- 任务 test
线程:id-11,name:myThreadFactory-thread-0,2017-09-07 09:40:20被创建...
线程:id-12,name:myThreadFactory-thread-1,2017-09-07 09:40:21被创建...
线程:id-13,name:myThreadFactory-thread-2,2017-09-07 09:40:22被创建...
main -> 结束..
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息