11.多线程学习--用线程工厂创建线程

package com.jackson.deng.concurrent.chapter1.eleven;

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;

/**
 * 用线程工厂创建线程
 * function desc : 实现ThreadFactory 接口来创建Thread 对象,当我们储存创建的线程对象时,可以取个性化的名字。
 * summary : 
 * 在面向对象编程的世界中,工厂模式是最有用的设计模式。它是一个创造模式,还有它的目的是创建一个或几个类的对象的对象。
 * 然后,当我们想创建这些类的对象时,我们使用工厂来代替new操作。
 * 有了这个工厂,我们有这些优势来集中创建对象们:更简单的改变了类的对象创建或者说创建这些对象的方式。
 * 更简单的为了限制的资源限制了对象的创建。 例如, 我们只new一个此类型的对象。
 * 更简单的生成创建对象的统计数据。
 * Java提供一个接口, ThreadFactory 接口实现一个线程对象工厂。 并发 API 使用线程工厂来创建线程的一些基本优势。
 * 
 * @author jackson
 *
 */
public class CreateThreadUserThreadFactory {

	public class MyThreadFactory implements ThreadFactory {

		private String name;
		private int counter;
		private List<String> status;

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

		@Override
		public Thread newThread(Runnable r) {
			Thread thread = new Thread(r, name + "-" + counter);
			counter++;
			status.add("id = " + thread.getId() + ",name = " + thread.getName() + ",date = " + new Date() + "\n");
			return thread;
		}

		public String getStatus() {
			StringBuilder buffer = new StringBuilder();
			Iterator<String> iterator = status.iterator();
			while (iterator.hasNext()) {
				buffer.append(iterator.next());
			}
			return buffer.toString();
		}
	}

	public class Task implements Runnable {

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

	}

	public static void main(String[] args) {
		CreateThreadUserThreadFactory factory = new CreateThreadUserThreadFactory();
		MyThreadFactory myFactory = factory.new MyThreadFactory("myFactory");//创建一个线程工厂
		Task task = factory.new Task();
		Thread thread = null;
		System.out.println("Thread starting : ");
		for (int i = 0; i < 10; i++) {
			thread = myFactory.newThread(task);//通过线程工厂来创建线程
			thread.start();
		}
		System.out.println("Factory status is " + myFactory.getStatus());
	}
}

运行结果:

Thread starting : 
Factory status is id = 8,name = myFactory-0,date = Tue Nov 04 15:42:44 CST 2014
id = 9,name = myFactory-1,date = Tue Nov 04 15:42:44 CST 2014
id = 10,name = myFactory-2,date = Tue Nov 04 15:42:44 CST 2014
id = 11,name = myFactory-3,date = Tue Nov 04 15:42:44 CST 2014
id = 12,name = myFactory-4,date = Tue Nov 04 15:42:44 CST 2014
id = 13,name = myFactory-5,date = Tue Nov 04 15:42:44 CST 2014
id = 14,name = myFactory-6,date = Tue Nov 04 15:42:44 CST 2014
id = 15,name = myFactory-7,date = Tue Nov 04 15:42:44 CST 2014
id = 16,name = myFactory-8,date = Tue Nov 04 15:42:44 CST 2014
id = 17,name = myFactory-9,date = Tue Nov 04 15:42:44 CST 2014


我们可以看到通过工厂创建了10个线程,其实就是这么简单,extends ThreadFactory,不需要自己写一个工厂,如果那样就复杂化了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值