`
liushulin
  • 浏览: 1587 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

重写ThreadPoolFactory

 
阅读更多
public class Test_ThreadPoolExecutor {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Test_ThreadPoolExecutor tt = new Test_ThreadPoolExecutor();
		tt.start();
	}
	
	public void start(){
		final AtomicInteger atomicInteger = new AtomicInteger(1);
		/*
		 * 定义一个线程池,自定义ThreadFactory,加入自定义的未捕获异常处理器,自定义线程的名字
		 */
		MyThreadPoolExecutor pool = new MyThreadPoolExecutor(3, 3, 5, TimeUnit.SECONDS,
				new LinkedBlockingQueue<Runnable>(),new ThreadFactory() {
					@SuppressWarnings({ "static-access", "deprecation" })
					@Override
					public Thread newThread(Runnable r) {
						Thread t = new Thread(r, "无敌线程"+atomicInteger.incrementAndGet());
						t.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
							@Override
							public void uncaughtException(Thread t, Throwable e) {
								System.out.println("线程 "+t.getId()+" "+t.getName()+" 发生未捕获异常...");
							}
						});
						return t;
					}
				});
		
		for(int i=0;i<10;i++){
			final int m = i;
			pool.execute(new Runnable() {
				
				@Override
				public void run() {
					System.out.println(m+" execute 线程信息="+Thread.currentThread().getId()+" "+Thread.currentThread().getName()+" ");
					if(m==8){
						int n = 10/0;
					}
					try {
						Thread.sleep((long) (Math.random()*15000));
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			});
		}
		
	}
	
	
	/**
	 * 自定义ThreadPoolExecutor
	 *	
	 *重写newTaskFor beforeExecute afterExecute
	 *
	 *线程池里的每一个线程在执行runnable之前之后都需要执行beforeExecute afterExecute方法,这两个方法和runnable在同一个线程中执行。
	 *
	 *重写newTaskFor可以自定义返回的FutureTask,重写FutureTask里面的cancle方法可以自定义cancle过程中需要做的事情。
	 */
	class MyThreadPoolExecutor extends ThreadPoolExecutor {
		
		public MyThreadPoolExecutor(int corePoolSize, int maximumPoolSize,
				long keepAliveTime, TimeUnit unit,
				BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory) {
			super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
					threadFactory);
		}
		
		@Override
		protected <T> RunnableFuture<T> newTaskFor(Callable<T> callable) {
			return super.newTaskFor(callable);
		}
		

		@Override
		protected void beforeExecute(Thread t, Runnable r) {
			super.beforeExecute(t, r);
			System.out.println("beforeExecute 线程信息="+Thread.currentThread().getId()+" "+Thread.currentThread().getName()+" ");
		}
		
		@Override
		protected void afterExecute(Runnable r, Throwable t) {
			super.afterExecute(r, t);
			System.out.println("afterExecute 线程信息="+Thread.currentThread().getId()+" "+Thread.currentThread().getName()+" ");
		}
		
	}
	
	
	
	/**
	 * 自定义FutureTask
	 */
	class MyFutureTask<T> extends FutureTask<T> {

		public MyFutureTask(Callable<T> callable) {
			super(callable);
			// TODO Auto-generated constructor stub
		}
		
		@Override
		public boolean cancel(boolean mayInterruptIfRunning) {
			/**
			 * 可以自定义一些cancel的时候应该干的事情........
			 */
			return super.cancel(mayInterruptIfRunning);
		}
		
	}
	
	

}

 

分享到:
评论

相关推荐

    asp.net c# Url重写和无扩展名Url重写

    ASP.NET C# URL重写和无扩展名URL重写是两个关键的Web开发技术,用于改进网站的用户体验和搜索引擎优化(SEO)。它们涉及到对应用程序内部请求处理的方式,使得用户可以使用更加友好、易于记忆的URL,同时保持后端...

    C#重写MessageBox对话框

    C#重写MessageBox对话框C#重写MessageBox对话框C#重写MessageBox对话框C#重写MessageBox对话框C#重写MessageBox对话框C#重写MessageBox对话框C#重写MessageBox对话框

    Url重写示例(无后缀Url重写)

    Url重写是Web开发中的一个重要概念,主要用于优化和管理网站的网址结构,使其更符合搜索引擎优化(SEO)标准,同时也可提升用户体验。无后缀Url重写是指在URL中不显示传统的文件扩展名,如.aspx、.html等,使网址看...

    微信小程序 重写App、重写Page 自定义分享

    在微信小程序开发中,"重写App、重写Page与自定义分享"是常见的需求,它们涉及到小程序的基础架构和用户体验优化。以下将详细介绍这些概念及其应用。 **重写App** `App`是微信小程序的全局应用程序对象,它包含了...

    C# url重写 C# url重写

    在IT行业中,URL重写是一项重要的技术,尤其是在Web开发领域,它可以帮助我们创建更美观、更易读且更友好的URL。C#是.NET框架下的主要编程语言,它提供了多种方式来实现URL重写。本篇文章将深入探讨C#中URL重写的...

    c#重写的tabcontrol控件

    本篇文章将深入探讨如何在C#中重写TabControl控件,以及这个过程可能涉及的关键知识点。 首先,让我们了解为什么要重写TabControl。原生的TabControl虽然功能强大,但它的外观和行为可能无法完全符合每个应用程序的...

    ASP.NETweb网站Url重写,地址栏重写

    ASP.NET Web 网站的URL重写是提高网站可读性和SEO优化的重要技术手段。在网站开发中,我们常常需要将复杂的、包含参数的URL转换为简洁、友好的格式,以便用户理解和搜索引擎更容易抓取。本文将深入探讨ASP.NET Web...

    url重写工具,重写二级域名

    标题中的“url重写工具”指的是用于转换或重新映射网站URL的一种技术,它能够将不友好的、复杂的URL转化为用户友好的、简洁的形式。在.NET环境中,这通常通过使用IIS(Internet Information Services)的扩展性来...

    C#实现按钮Button的重写

    本文将深入探讨如何在C#中实现对按钮控件(Button)的重写,以创建自定义的“漂亮”按钮。 首先,我们要理解重写(Override)的概念。在面向对象编程中,重写是指子类重新定义父类中的某个方法,以便提供自己的实现...

    重写window.alert方法

    这就是“重写window.alert方法”的目的。 重写`window.alert()`主要是通过覆盖原有的方法来实现。在JavaScript中,对象的方法是可以被替换的,因此我们可以在全局作用域内定义一个新的`alert`函数,让它执行我们...

    二级域名重写 二级域名重写

    根据提供的标题、描述、标签及部分内容,我们可以了解到讨论的主题是“二级域名重写”,下面将对这一主题进行详细的解析。 ### 二级域名重写的概念 首先,我们需要理解什么是二级域名重写。简单来说,二级域名重写...

    URL重写实例,无二级重写

    URL重写是Web开发中的一个重要概念,主要用于优化网站的URL结构,提高用户体验并有利于搜索引擎优化(SEO)。在ASP.NET环境中,Microsoft提供了URL重写模块,使得开发者能够方便地实现URL的美化和管理。本实例主要...

    java中的url重写

    Java 中的 URL 重写 Java 中的 URL 重写是一种常用的技术,它可以将原始的 URL 转换为另一个 URL,以便达到特定的目的。例如,隐藏真实的 URL、实现 URL 的加密、实现 URL 的重定向等。在 Java 中,有多种方式可以...

    IISURL重写组件

    **IIS URL重写组件详解** IIS(Internet Information Services)是微软提供的一个强大的Web服务器,用于托管网站和应用程序。在IIS中,URL重写组件是一个非常关键的工具,它允许管理员根据预定义的规则改变请求的...

    Java重写.docx

    Java重写知识点详解 Java中的重写(Override)和重载(Overload)是两个重要的概念,它们都是指方法的定义方式,但是它们之间存在着明显的区别。 方法的重载 在同一个类中,可以定义多个方法,它们的方法名相同,...

    URL重写的一个例子

    URL重写是Web开发中的一种技术,主要用于优化和简化用户访问网站时的URL结构,使其更易读、更友好。这种技术通常与动态网站或基于框架的应用程序配合使用,例如ASP.NET、PHP、Java等。在本例中,我们将探讨URL重写的...

    U盘芯片重写教程与工具

    本教程介绍了U盘量产(重写存储分区)的全过程,在附件内还提供了重写的必要工具:MyDiskTest、FlashGenius、chipgenius。 下载本教程后,可根据doc文档的描述内容进行操作,对U盘重新写入。 本教程常用于: 1,建立...

    Nginx 重写规则教程

    Nginx 重写规则是Nginx服务器中用于处理URL请求的重要功能,它允许运维人员通过正则表达式来改变请求的URI,实现URL的重定向、路由转发等多种用途。本教程旨在帮助你理解Nginx的重写模块及其相关指令,以便你能独立...

    ASP.NET C# URL重写 地址重写 伪静态 转HTML

    ASP.NET C# URL重写是Web开发中的一个重要概念,它涉及到网站的地址结构优化和搜索引擎友好性提升。在本文中,我们将深入探讨URL重写、地址重写、伪静态以及如何将ASP.NET C#应用程序中的动态页面转换为HTML,以提高...

    C#重写重载与多态

    在C#编程语言中,重写、重载和多态是面向对象编程的三大核心特性,它们对于构建灵活、可扩展的代码结构至关重要。 首先,我们来看“重写”。重写(Override)允许子类对从基类继承来的方法进行重新定义,以便提供...

Global site tag (gtag.js) - Google Analytics