JAVA ThreadPool & ThreadFactory

package threadPool;

import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * @ClassName: BasicThreadFactory
 * @Description: TODO
 * @author Zhou Shengshuai
 * @date 2014年9月22日 上午10:09:30
 *
 */
public class BasicThreadFactory implements ThreadFactory {
	private final ThreadGroup threadGroup;
	private final AtomicInteger threadNumber = new AtomicInteger(1);
	private final String threadNamePrefix;

	/**
	 * 构造函数
	 *
	 * @param threadPoolName
	 *            线程池名称
	 */
	public BasicThreadFactory(String threadPoolName) {
		SecurityManager securityManager = System.getSecurityManager();

		threadGroup = (securityManager != null) ? securityManager.getThreadGroup() : Thread.currentThread().getThreadGroup();

		threadNamePrefix = threadPoolName + "-thread-";
	}

	/**
	 * 创建线程
	 */
	@Override
	public Thread newThread(Runnable runnable) {
		Thread thread = new Thread(threadGroup, runnable, threadNamePrefix + threadNumber.getAndIncrement(), 0);

		if (thread.isDaemon()) {
			thread.setDaemon(false);
		}

		if (thread.getPriority() != Thread.MAX_PRIORITY) {
			thread.setPriority(Thread.MAX_PRIORITY);
		}

		return thread;
	}
}

package threadPool;

/**
 * @ClassName: BasicThreadTask
 * @Description: TODO
 * @author Zhou Shengshuai
 * @date 2014年9月22日 上午10:12:02
 *
 */
public class BasicThreadTask implements Runnable {

	@Override
	public void run() {
		System.out.println(Thread.currentThread().getName());
	}

}

package threadPool;

import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;

/**
 * @ClassName: MainThreadTask
 * @Description: TODO
 * @author Zhou Shengshuai
 * @date 2014年9月22日 上午10:14:34
 *
 */
public class MainThreadTask {
	private ThreadPoolExecutor threadPoolExecutor = null;

	public void initial() {
		threadPoolExecutor = (ThreadPoolExecutor) Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors(), new BasicThreadFactory("BasicThreadFactory"));
	}

	public void execute() {
		for (int index = 0; index < 10; index++) {
			threadPoolExecutor.execute(new BasicThreadTask());
		}
	}

	public void destroy() {
		threadPoolExecutor.shutdown();
	}

	/**
	 * @Title: main
	 * @Description: TODO
	 * @param args
	 * @throws
	 */
	public static void main(String[] args) {
		MainThreadTask mainThreadTask = new MainThreadTask();

		mainThreadTask.initial();
		mainThreadTask.execute();
		mainThreadTask.destroy();
	}

}
时间: 2024-09-11 18:34:26

JAVA ThreadPool &amp; ThreadFactory的相关文章

Java线程池入门

在做很多高并发应用的时候,单线程的瓶颈已经满足不了我们的需求,此时使用多线程来提高处理速度已经是比较常规的方案了.在使用多线程的时候,我们可以使用线程池来管理我们的线程,至于使用线程池的优点就不多说了. 对于多线程的线程安全处理,这个也非常重要,有些同学还是要多补补课. Java线程池说起来也简单,简单说下继承关系: ThreadPoolExecutor extends AbstractExecutorService implements ExecutorService extends Exec

Java线程池例子

在做很多高并发应用的时候,单线程的瓶颈已经满足不了我们的需求,此时使用多线程来提高处理速度已经是比较常规的方案了.在使用多线程的时候,我们可以使用线程池来管理我们的线程,至于使用线程池的优点就不多说了. 对于多线程的线程安全处理,这个也非常重要,有些同学还是要多补补课. Java线程池说起来也简单,简单说下继承关系: ThreadPoolExecutor extends AbstractExecutorService implements ExecutorService extends Exec

java线程池ThreadPoolExecutor 如何与 AsyncTask() 组合使用

简单说下Executors类,提供的一系列创建线程池的方法: 他们都有两个构造方法 1. --------newFixedThreadPool (创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待.) public static ExecutorService newFixedThreadPool (int nThreads); public static ExecutorService newFixedThreadPool (int nThreads, ThreadFactor

简单ThreadPool实现

由于最近需要用多线程处理一些问题,一开始我用了.net默认的ThreadPool, 感觉不是很适合.于是我自己实现了一个简单的ThreadPool. 写的比较简单,有兴趣的朋友一起看看,共同改进. 代码主要由ThreadPoolEx,WorkItem,WorkQueue组成. ThreadPoolEx 1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using S

Java线程池的理论与实践

前段时间公司里有个项目需要进行重构,目标是提高吞吐量和可用性,在这个过程中对原有的线程模型和处理逻辑进行了修改,发现有很多基础的多线程的知识已经模糊不清,如底层线程的运行情况.现有的线程池的策略和逻辑.池中线程的健康状况的监控等,这次重新回顾了一下,其中涉及大量java.util.concurrent包中的类.本文将会包含以下内容: Java中的Thread与操作系统中的线程的关系 线程切换的各种开销 ThreadGroup存在的意义 使用线程池减少线程开销 Executor的概念 Thread

JAVA进阶----ThreadPoolExecutor机制(转)

ThreadPoolExecutor机制 一.概述 1.ThreadPoolExecutor作为java.util.concurrent包对外提供基础实现,以内部线程池的形式对外提供管理任务执行,线程调度,线程池管理等等服务: 2.Executors方法提供的线程服务,都是通过参数设置来实现不同的线程池机制. 3.先来了解其线程池管理的机制,有助于正确使用,避免错误使用导致严重故障.同时可以根据自己的需求实现自己的线程池  二.核心构造方法讲解 下面是ThreadPoolExecutor最核心的

如何捕获java线程中的逃逸的异常

在java线程中,在run方法中,我们要在run()方法中,把一切的异常有处理掉,也就try-catch掉.不能让这个线程抛出异常,因为如果我们不使用特殊的方式的话,我们是无法捕获从这个线程中逃逸的异常的.异常一旦抛出了,那么这个线程就会停止运行,但是不会影响主线程和其它的线程.因为主线程和其它的线程都不知道它抛出了异常. 线程在run方法抛出异常,没有catch 那么会有疑问,是不是在main函数里面没有catch ``` package Thread.UncaughtExceptionHan

java实现文件变化监控的方法(推荐)_java

一. spring配置文件:application.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://ww

Java实现文件变化监控_java

一. spring配置文件: application.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://w