文档章节

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

pan_1308
 pan_1308
发布于 2017/09/07 09:42
字数 453
阅读 36
收藏 2

一、概述

工厂模式是面向对象编程中最常使用的模式之一,它是个创建者模式,使用一个类为其他的一个或者多个类创建对象。当我们要为这些类创建对象时,不需再使用 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 -> 结束..

 

© 著作权归作者所有

共有 人打赏支持
pan_1308
粉丝 5
博文 95
码字总数 58819
作品 0
黄冈
私信 提问
Java多线程(全)学习笔记(下)

七.Callable和Future接口 C#可以把任意方法包装成线程执行体,包括那些有返回值的方法。Java也从jdk1.5开始,加入了Callable接口用来扩展Runnable接口的功能,Callable接口提供一个call()...

明舞
2014/07/27
0
0
-1-5 java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方法都定义在Object类中

本文关键词: java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方...

noteless
2018/07/03
0
0
ThreadLocal 基础知识

ThreadLocal是什么 · 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。 ...

向阳而生
2015/11/21
0
0
Java多线程之线程池(ThreadPoolExecutor)实现原理分析(一)

在上一篇文章Java中实现多线程的3种方法介绍和比较中,我们讲解了Java中实现多线程的3种方法。使用多线程,就必须要考虑使用线程池,今天我们来聊聊线程池的那些事。 注:源码都是基于JDK1....

小怪聊职场
2018/05/14
0
0
深入研究java.lang.ThreadLocal类

一、概述 ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是threadlocalvariable(线程局部变量)。也许把它命名为ThreadLocalVar更加合适。线程局...

FoxHu
2012/05/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

乱入Linux界的我是如何学习的

欢迎来到建哥学Linux,咳!咳!咳!开个玩笑哈,我是一个IT男,IT界的入门选手,正在学习Linux。 在之前,一直想进军IT界,学习IT技术,但是苦于没有人指导,也不知道学什么,最开始我自己在...

linuxCool
38分钟前
1
0
携程Apollo统一配置中心的搭建和使用(java)

一.Apollo配置中心介绍 1、What is Apollo 1.1 Apollo简介 Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到...

morpheusWB
58分钟前
1
0
远程获得的有趣的linux命令

使用这些工具从远程了解天气、阅读资料等。 我们即将结束为期 24 天的 Linux 命令行玩具日历。希望你有一直在看,如果没有,请回到开始,从头看过来。你会发现 Linux 终端有很多游戏、消遣和...

Linux就该这么学
今天
6
0
聊聊flink的AsyncWaitOperator

序 本文主要研究一下flink的AsyncWaitOperator AsyncWaitOperator flink-streaming-java_2.11-1.7.0-sources.jar!/org/apache/flink/streaming/api/operators/async/AsyncWaitOperator.java ......

go4it
今天
5
0
Java并发编程基础(四)

ThreadGroup 在主线程创建得线程,如果没有给他指定线程组,那么创建的线程,默认和主线程同一个线程组。线程组可以底下可以是线程,也可以实线程组。 构建线程组的方法: private ThreadGr...

chendom
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部