文档章节

Java 多线程

lizx_2016
 lizx_2016
发布于 2017/11/06 11:08
字数 250
阅读 25
收藏 0

Thread pool help class code :

package com.lizx.test;

import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;

/**
 * 线程池工具类
 * 
 * @author Nevyn
 *
 */
public final class ThreadPoolUtil {
	public static final String MODULE_TRANSACTION_SEND = "transaction_send";
	public static final String MODULE_MESSAGE_RESEND = "message_resend";
	private static ConcurrentHashMap<String, ExecutorService> executorMap = new ConcurrentHashMap<String, ExecutorService>();

	private ThreadPoolUtil() {
		Runtime.getRuntime().addShutdownHook(new Thread() {
			@Override
			public void run() {
				for (Entry<String, ExecutorService> entry : executorMap.entrySet()) {
					ExecutorService service = entry.getValue();
					if (service != null) {
						service.shutdown();
					}
				}

			}
		});
	}

	public static ExecutorService createExecutor(int poolSize, String module) {

		String threadKey = module + poolSize;
		ExecutorService service = executorMap.get(threadKey);
		if (service == null) {
			ExecutorService newservice = Executors.newFixedThreadPool(poolSize);
			service = executorMap.putIfAbsent(threadKey, newservice);
			if (service == null) {
				service = newservice;
			}
		}
		if (service instanceof ThreadPoolExecutor) {
			ThreadPoolExecutor exc = (ThreadPoolExecutor) service;
			exc.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
		}
		return service;
	}

	public static void submit(int poolSize, String module, Runnable task) {
		ExecutorService service = createExecutor(poolSize, module);

		service.submit(task);
	}
}

 

Test Class code:

 First :Creating Thead Clesses

class TestThread implements Runnable {
	int index = 0;

	public TestThread(int index) {
		this.index = index;
	}

	@Override
	public void run() {
		System.out.println("===Thread ==Begin=" + index);
		try {
			Thread.sleep(500);
		} catch (Exception e) {
			// TODO: handle exception
		}
		// TODO Auto-generated method stub
		// System.out.println("===Thread =End==");
	}
}

Two : Createing main method 

public static void main(String[] args) {

	for (int i = 0; i < 100; i++) {
		ThreadPoolUtil.submit(5, ThreadPoolUtil.MODULE_TRANSACTION_SEND, new TestThread(i));
	}
}

parameter introduction:

5代表同时可启动5个线程 , 实际开发中可按照自身的需求进行调整;

© 著作权归作者所有

lizx_2016
粉丝 0
博文 18
码字总数 22285
作品 0
广州
私信 提问
15个顶级Java多线程面试题及回答

Java 线程面试问题 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分。如果你想获得任何股票投资银行的前台资讯职位,那么你应该准备很多关于多线程的问题。在投资银行业务中多...

LCZ777
2014/05/27
0
0
浅谈Java中的ThreadLocal的多线程应用问题

什么是ThreadLocal?首先要说明的一点是ThreadLocal并不是一个Thread,而是Thread的局部变量。在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了...

小欣妹妹
2017/10/23
0
0
java面试必备之ThreadLocal

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

编程老司机
2018/05/16
0
0
java中高级大公司多线程面试题

1)在Java中Lock接口比synchronized块的优势是什么?你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它? lock接口在多线程和并发编...

java成功之路
2018/10/30
0
0
一份关于 Java、Kotlin 与 Android 的学习笔记

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

叶应是叶
2018/08/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

硬件配置

https://akkadia.org/drepper/futex.pdf sudo lshw -businfo[sudo] lambda 的密码: Bus info Device Class Description======================================......

MtrS
今天
3
0
springmvc的return “success”源码解读

qqqq

architect刘源源
今天
6
0
Java程序员五面阿里分享 逆袭成功 太不容易了!

前言 拿到阿里实习offer,经历了5次面试,其中4轮技术面,1轮HR面试。在这里分享一下自己的面试经验和学习心得。希望能够帮助更多的小伙伴。 我本科毕业于中南大学信管专业,真正开始学习Jav...

别打我会飞
昨天
4
0
Android Camera模块解析之视频录制

《Android Camera架构》 《Android Camera进程间通信类总结》 《Android Camera模块解析之拍照》 《Android Camera模块解析之视频录制》 《Android Camera原理之CameraDeviceCallbacks回调模...

天王盖地虎626
昨天
2
0
手把手教你使用issue作为博客评论系统

自从上周在阮一峰的 每周分享第 60 期 看到了可以将 GitHub 的 issue 当作评论系统,插入第三方网页的 JS 库——utterances。我就对此“魂牵梦绕”。个人博客使用的是VuePress。 TLDR (不多废...

jump--jump
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部