博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(一)线程管理_11---通过工厂方法创建线程
阅读量:6184 次
发布时间:2019-06-21

本文共 2341 字,大约阅读时间需要 7 分钟。

hot3.png

通过工厂方法创建线程

工厂方法设计模式是面向对象编程中最常用的设计模式之一,工厂方法属于创建类型,主要用来创建对象;

使用工厂方法创建对象有几个有点:

  • 很容易改变创建的对象或者创建对象的方法;
  • 限制创建对象的数量;
  • 很容易的对这些创建的对象进行数据统计(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
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方法,用来创建线程,在这个方法里,对于创建的线程我们可以加入一些更多的控制;工厂方法和静态工厂方法是不一样的,具体区别以后记录;

转载于:https://my.oschina.net/u/1387007/blog/343245

你可能感兴趣的文章
设计模式 单例模式(Singleton)
查看>>
jqurey 隐藏
查看>>
Python-编码(base64,md5)
查看>>
Cisco Eigrp SIA 理解
查看>>
正则表达式学习
查看>>
Ceph分布式存储更换磁盘操作步骤
查看>>
使用windows server 2008创建DHCP服务器
查看>>
TextView预渲染研究
查看>>
【迁移2016-07-02 20:46】Tomcat(一)-重定向Web应用程序目录
查看>>
MySQL数据库的下载及安装教程
查看>>
转 Library cache内部机制详解
查看>>
[每日一题]11gOCP 1z0-052 :2013-09-11 MGR_ROLE role..........................................A66
查看>>
我的友情链接
查看>>
虚拟机虚拟网卡作用
查看>>
Java各种修饰限定符的权限范围
查看>>
关于在Word、Excel、Outlook等ofifce软件中打开超链接时提示:由于本机限制,请与管理员联系。的解决方法...
查看>>
shell十三问-13) for what? while 与 until 差在哪
查看>>
Hibernate笔记——10.继承映射
查看>>
我的友情链接
查看>>
extmail邮件系统 网页加载特别慢,加载超时 解决方法
查看>>