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 -> 结束..
相关文章推荐
- 牛客网Java刷题知识点之什么是进程、什么是线程、什么是多线程、多线程的好处和弊端、多线程的创建方式、JVM中的多线程解析、多线程运行图解
- Java基础-多线程-①线程的创建和启动
- Java多线程-1 创建线程
- java中的多线程——线程创建方式、线程互斥和线程间通信
- Java多线程2—线程的创建
- 多线程之:java线程创建
- java多线程总结一: 线程的两种创建方式及优劣比较
- Java学习之多线程--创建线程的三种方式
- java线程一之创建线程、线程池以及多线程运行时间统计
- 7、Java并发性和多线程-如何创建并运行线程
- 初学Java多线程:用Thread类创建线程
- java 多线程学习之创建线程
- java多线程中校验一个后台线程中创建一个新线程,新线程是否是后台线程
- Java多线程之线程的创建
- java多线程总结一: 线程的两种创建方式及优劣比较
- Java 多线程详解(二)------如何创建进程和线程
- java 多线程总结(一) 创建线程的几种方法及对终止线程运行的讨论
- 初学Java多线程:使用Runnable接口创建线程
- Java多线程从0到1之线程创建(一)
- java多线程-售票例子-创建线程-实现Runnable接口