(一)线程管理_11---通过工厂方法创建线程
来源:互联网 发布:win10m vpn软件 编辑:程序博客网 时间:2024/05/22 14:28
通过工厂方法创建线程
工厂方法设计模式是面向对象编程中最常用的设计模式之一,工厂方法属于创建类型,主要用来创建对象;
使用工厂方法创建对象有几个有点:
- 很容易改变创建的对象或者创建对象的方法;
- 限制创建对象的数量;
- 很容易的对这些创建的对象进行数据统计(generate statistic data)
Java提供了ThreadFactory 接口用来实现工厂方法创建线程;
动手实现
1.实现一个工厂方法
public class MyThreadFactory implements ThreadFactory { private AtomicInteger threadNumber = new AtomicInteger(0); // Store thread name private String name; // Store statistical data about the Thread object created private List<String> stats; private ThreadGroup group; public MyThreadFactory(String name) { this.name = name; stats = new ArrayList<>(); SecurityManager s = System.getSecurityManager(); group = (s != null) ? s.getThreadGroup() : Thread.currentThread().getThreadGroup(); } @Override public Thread newThread(Runnable r) { Thread t = new Thread(group,r, name + "-Thread_" + threadNumber.getAndIncrement()); if (t.isDaemon()) t.setDaemon(false); if (t.getPriority() != Thread.NORM_PRIORITY) t.setPriority(Thread.NORM_PRIORITY); stats.add(String.format("Created thread %d with name %s in group %s, on %s\n", t.getId(), t.getName(),t.getThreadGroup().getName(), Utils.dateFormat(new Date()))); return t; } public String getStats() { StringBuffer buffer = new StringBuffer(); for (String stat : stats) { buffer.append(stat); buffer.append("\n"); } return buffer.toString(); }}
2.实现一个线程任务
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) { MyThreadFactory threadFactory = new MyThreadFactory("MyThreadFactory"); Task task=new Task(); Thread thread; System.out.printf("Starting the Threads\n"); for (int i=0; i<10; i++){ thread=threadFactory.newThread(task); thread.start(); } System.out.printf("Factory stats:\n"); System.out.printf("%s\n",threadFactory.getStats()); }}
stats中保存了创建这些对象的信息,可以作为一个统计结果
要点
ThreadFactory 接口提供了newThread方法,用来创建线程,在这个方法里,对于创建的线程我们可以加入一些更多的控制;工厂方法和静态工厂方法是不一样的,具体区别以后记录;
0 0
- (一)线程管理_11---通过工厂方法创建线程
- (一)线程管理_1---创建和运行线程
- (一)线程管理_6---创建守护线程(deamon thread)
- (一)线程管理_1---创建和运行线程
- 初识pthread(一)-线程管理之创建/结束线程
- 线程管理(二)创建线程池管理线程
- 线程(一)-线程的创建
- 管理线程之创建线程
- 管理线程之创建线程
- 通过Runnerable创建线程
- ACE线程管理(一)
- Android线程管理(一)
- java线程(一):线程创建与线程状态
- 线程(一)--线程控制-join方法
- 线程(创建线程)
- java基础<线程>总结(线程概念、线程创建方式、线程间通信、线程重要方法)
- 多线程(一)——通过实现Runnable接口创建线程
- Java并发编程之线程管理(线程创建1)
- test
- 送走快乐的十月!!!
- 最美的时光
- c++学习笔记 char string
- radioButton的使用(单选按钮的使用)
- (一)线程管理_11---通过工厂方法创建线程
- 战略管理与伦理
- 【跟我一起学Unity3D】做一个2D的90坦克大战之各种各样的墙<<附上项目源码>>
- codefroce D. Powerful array[初识块状数组]
- spring的那点事
- VC获取程序所在目录
- 6174问题
- QT语音平台房间1210八组似水为你打造淘宝爆款
- 位运算符操作