文档章节

JAVA多线程问题【1】 ThreadFactory接口用法

南栀安
 南栀安
发布于 2017/09/04 18:25
字数 456
阅读 5
收藏 0

今天看到有一篇博客介绍,百分之八十的多线程问题都是通过ThreadFactory来解决的。

在java中,我们通常使用两种方法即创建线程。线程实现runnable接口的类和扩展。Java还提供了一个接口,ThreadFactory接口,创建你自己的Thread对象的工厂。

根据需要创建新线程的对象。使用线程工厂就无需再手工编写对 new Thread 的调用了,从而允许应用程序使用特殊的线程子类、属性等等。

ThreadFactory的例子

Task.java

class Task implements Runnable  
{  
   @Override  
   public void run()  
   {  
      try  
      {  
         TimeUnit.SECONDS.sleep(2);  
      } catch (InterruptedException e)  
      {  
         e.printStackTrace();  
      }  
   }  
}  

TestMyThread.java

package mbmp.mbmp.display.bigScreen.webapp.action;

import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.ThreadFactory;


public class TestMyThread implements ThreadFactory{
	
	private int counter;  
    private String name;  
    private List<String> stats;  
    
    public TestMyThread(String name) {  
        counter = 0;  
        this.name = name;  
        stats = new ArrayList<String>();  
    }  
    
    public String getStas() {  
        StringBuffer buffer = new StringBuffer();  
        Iterator<String> it = stats.iterator();  
        while(it.hasNext()) {  
            buffer.append(it.next());  
            buffer.append("\n");  
        }  
        return buffer.toString();  
    }  
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		TestMyThread factory = new TestMyThread("MyThreadFactory");  
        Task task = new Task();  
        Thread thread = null;  
        for(int i = 0; i < 10; i++) {  
            thread = factory.newThread(task);  
            thread.start();  
        }  
        System.out.printf("Factory stats:\n");  
        System.out.printf("%s\n",factory.getStas());  
	}

	@Override
	public Thread newThread(Runnable run) {
		Thread t = new Thread(run, name + "-Thread-" + counter);  
        counter++;  
        stats.add(String.format("Created thread %d with name %s on%s\n" ,t.getId() ,t.getName() ,new Date()));  
        return t;
	}
}

console输出

Factory stats:
Created thread 9 with name MyThreadFactory-Thread-0 onMon Sep 04 18:12:11 CST 2017

Created thread 10 with name MyThreadFactory-Thread-1 onMon Sep 04 18:12:11 CST 2017

Created thread 11 with name MyThreadFactory-Thread-2 onMon Sep 04 18:12:11 CST 2017

Created thread 12 with name MyThreadFactory-Thread-3 onMon Sep 04 18:12:11 CST 2017

Created thread 13 with name MyThreadFactory-Thread-4 onMon Sep 04 18:12:11 CST 2017

Created thread 14 with name MyThreadFactory-Thread-5 onMon Sep 04 18:12:11 CST 2017

Created thread 15 with name MyThreadFactory-Thread-6 onMon Sep 04 18:12:11 CST 2017

Created thread 16 with name MyThreadFactory-Thread-7 onMon Sep 04 18:12:11 CST 2017

Created thread 17 with name MyThreadFactory-Thread-8 onMon Sep 04 18:12:11 CST 2017

Created thread 18 with name MyThreadFactory-Thread-9 onMon Sep 04 18:12:11 CST 2017


 

© 著作权归作者所有

共有 人打赏支持
南栀安
粉丝 1
博文 20
码字总数 5177
作品 0
绍兴
私信 提问
Java的九个知识点

关于java编程的知识,有人会问哪些是重要的知识点,不知道大家是否都知道呢? 现在给大家分享一下! 1.多线程并发 多线程是Java中普遍认为比较难的一块。多线程用好了可以有效提高cpu使用率,...

紫魅编程
2016/09/25
874
2
一份关于 Java、Kotlin 与 Android 的学习笔记

JavaKotlinAndroidLearn 这是一份关于 Java 、Kotlin 、Android 的学习笔记,既包含对基础知识点的介绍,也包含对一些重要知识点的源码解析,笔记的大纲如下所示: Java 重拾Java(0)-基础知...

叶应是叶
08/08
0
0
Java多线程之线程池(ThreadPoolExecutor)实现原理分析(一)

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

小怪聊职场
05/14
0
0
Android ThreadLocal+PriorityQueue构建多线程队列

一、消息队列 Android中使用了很多消息队列,如Intent,Handler,BroadcastReceiver等。使用消息队列的目的是防止线程阻塞并且将不能及时执行的任务缓存起来,从而提高系统的运行效率。 为了使...

IamOkay
2014/11/03
0
0
JAVA多线程和并发基础面试问答

多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一。在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题。(校对注:...

LCZ777
2014/05/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【转载】缓存穿透,缓存击穿,缓存雪崩解决方案分析

前言 设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。 缓存穿透 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑...

xiaomin0322
17分钟前
0
0
Maven: Non-resolvable import POM:Failure to find *** in *** was cached in the local repository.

clean or package spring cloud 项目时,IDE 打印如下报错: Non-resolvable import POM: Failure to find org.springframework.cloud:spring-cloud-dependencies:pom:Greenwich.M3 in https......

AmosWang
20分钟前
0
0
性能优化(性能优化概述)

软件系统质量特性 安全性 同时兼顾向合法用户提供服务,以及阻止非授权使用软件及资源的能力。 健壮、可靠 软件系统在一定的时间内无故障运行的能力、容错能力、恢复能力 。 可用性、易用性、...

这很耳东先生
24分钟前
0
0
ZooKeeper命令大全

创建节点 # 创建节点,-s表示顺序节点,-e表示临时节点,默认是持久节点create [-s] [-e] path data acl # 示例create /zk-book 123 查看节点 ls path [watch] # 示例ls /zk-book 获取...

爱宝贝丶
34分钟前
3
0
Elasticsearch节点角色类型node.master和node.data说明s

一般地,ElasticSearch集群中每个节点都有成为主节点的资格,也都存储数据,还可以提供查询服务。这些功能是由两个属性控制的(node.master和node.data)。默认情况下这两个属性的值都是tru...

傲娇字符
50分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部