文档章节

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

南栀安
 南栀安
发布于 2017/09/04 18:25
字数 456
阅读 1
收藏 0
点赞 0
评论 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是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/23 ⋅ 0

Java多线程之线程池(ThreadPoolExecutor)实现原理分析(一)

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

小怪聊职场 ⋅ 05/14 ⋅ 0

java面试必备之ThreadLocal

按照传统的经验,如果某个对象是非线程安全的,在多线程环境下对象的访问需要采用synchronized进行同步。但是模板类并未采用线程同步机制,因为线程同步会降低系统的并发性能,此外代码同步解...

编程老司机 ⋅ 05/16 ⋅ 0

Java面试需要准备哪些多线程并发的技术要点

一、概念 什么是线程 一个线程要执行任务,必须得有线程 一个进程(程序)的所有任务都在线程中执行的 一个线程执行任务是串行的,也就是说一个线程,同一时间内,只能执行一个任务 多线程原理 同一...

码蚁说架构 ⋅ 05/31 ⋅ 0

JAVA程序员面试题整理(较全面)

以下是在面试中可能会遇到的问题,话不多说,往下看 1、面向对象的特征有哪些方面? 2、访问修饰符public,private,protected,以及不写(默认)时的区别? 3、String 是最基本的数据类型吗? ...

编程大侠 ⋅ 04/09 ⋅ 0

Thinking In Java 21.2 基本的线程进制 学习摘要

对笔者近期刚阅读完的Thinking In Java的12.2节简单做个概述: 本节的主要内容: 为什么要引入多线程 多线程实现的机制:抢占式的轮转调度机制(如何避免抢占可以参考使用协作线程) 多线程的...

孤独的岛_Bin ⋅ 05/29 ⋅ 0

Java中实现多线程的3种方法介绍和比较

一、什么是多线程? 引用网上别人的一段话: 单进程单线程:一个人在一个桌子上吃菜。 单进程多线程:多个人在同一个桌子上一起吃菜。 多进程单线程:多个人每个人在自己的桌子上吃菜。 多线...

小怪聊职场 ⋅ 05/14 ⋅ 0

2018年Java编程学习面试最全知识点总结

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/14 ⋅ 0

JAVA多线程实现的三种方式和带返回值实现

1、JAVA多线程实现的四种方式 继承Thread类 实现Runnable接口 实现Callable接口通过FutureTask包装器来创建Thread线程 使用ExecutorService、Callable、Future实现有返回结果的多线程 2、继承...

职业搬砖20年 ⋅ 06/14 ⋅ 0

Java多线程学习(五)线程间通信知识点补充

系列文章传送门: Java多线程学习(一)Java多线程入门 Java多线程学习(二)synchronized关键字(1) java多线程学习(二)synchronized关键字(2) Java多线程学习(三)volatile关键字 Ja...

一只蜗牛呀 ⋅ 04/16 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

个人博客的运营模式能否学习TMALL天猫质量为上?

心情随笔|个人博客的运营模式能否学习TMALL天猫质量为上? 中国的互联网已经发展了很多年了,记得在十年前,个人博客十分流行,大量的人都在写博客,而且质量还不错,很多高质量的文章都是在...

原创小博客 ⋅ 今天 ⋅ 0

JavaScript零基础入门——(十一)JavaScript的DOM操作

JavaScript零基础入门——(十一)JavaScript的DOM操作 大家好,欢迎回到我们的JavaScript零基础入门。最近有些同学问我说,我讲的的比书上的精简不少。其实呢,我主要讲的是我在开发中经常会...

JandenMa ⋅ 今天 ⋅ 0

volatile和synchronized的区别

volatile和synchronized的区别 在讲这个之前需要先了解下JMM(Java memory Model :java内存模型):并发过程中如何处理可见性、原子性、有序性的问题--建立JMM模型 详情请看:https://baike.b...

MarinJ_Shao ⋅ 今天 ⋅ 0

深入分析Kubernetes Critical Pod(一)

Author: xidianwangtao@gmail.com 摘要:大家在部署Kubernetes集群AddOn组件的时候,经常会看到Annotation scheduler.alpha.kubernetes.io/critical-pod"="",以表示这是一个关键服务,那你知...

WaltonWang ⋅ 今天 ⋅ 0

原子性 - synchronized关键词

原子性概念 原子性提供了程序的互斥操作,同一时刻只能有一个线程能对某块代码进行操作。 原子性的实现方式 在jdk中,原子性的实现方式主要分为: synchronized:关键词,它依赖于JVM,保证了同...

dotleo ⋅ 今天 ⋅ 0

【2018.06.22学习笔记】【linux高级知识 14.4-15.3】

14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp

lgsxp ⋅ 今天 ⋅ 0

JeeSite 4.0 功能权限管理基础(Shiro)

Shiro是Apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权等。 只要有用户参与一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户...

ThinkGem ⋅ 昨天 ⋅ 0

python f-string 字符串格式化

主要内容 从Python 3.6开始,f-string是格式化字符串的一种很好的新方法。与其他格式化方式相比,它们不仅更易读,更简洁,不易出错,而且速度更快! 在本文的最后,您将了解如何以及为什么今...

阿豪boy ⋅ 昨天 ⋅ 0

Python实现自动登录站点

如果我们想要实现自动登录,那么我们就需要能够驱动浏览器(比如谷歌浏览器)来实现操作,ChromeDriver 刚好能够帮助我们这一点(非谷歌浏览器的驱动有所不同)。 一、确认软件版本 首先我们...

blackfoxya ⋅ 昨天 ⋅ 0

线性回归原理和实现基本认识

一:介绍 定义:线性回归在假设特证满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测。为了了解这个定义,我们先举个简单的例子;我们假设一个线性方程 Y=2x+1, x变量为商...

wangxuwei ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部