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重写是两个关键的Web开发技术,用于改进网站的用户体验和搜索引擎优化(SEO)。它们涉及到对应用程序内部请求处理的方式,使得用户可以使用更加友好、易于记忆的URL,同时保持后端...
C#重写MessageBox对话框C#重写MessageBox对话框C#重写MessageBox对话框C#重写MessageBox对话框C#重写MessageBox对话框C#重写MessageBox对话框C#重写MessageBox对话框
Url重写是Web开发中的一个重要概念,主要用于优化和管理网站的网址结构,使其更符合搜索引擎优化(SEO)标准,同时也可提升用户体验。无后缀Url重写是指在URL中不显示传统的文件扩展名,如.aspx、.html等,使网址看...
在微信小程序开发中,"重写App、重写Page与自定义分享"是常见的需求,它们涉及到小程序的基础架构和用户体验优化。以下将详细介绍这些概念及其应用。 **重写App** `App`是微信小程序的全局应用程序对象,它包含了...
在IT行业中,URL重写是一项重要的技术,尤其是在Web开发领域,它可以帮助我们创建更美观、更易读且更友好的URL。C#是.NET框架下的主要编程语言,它提供了多种方式来实现URL重写。本篇文章将深入探讨C#中URL重写的...
本篇文章将深入探讨如何在C#中重写TabControl控件,以及这个过程可能涉及的关键知识点。 首先,让我们了解为什么要重写TabControl。原生的TabControl虽然功能强大,但它的外观和行为可能无法完全符合每个应用程序的...
ASP.NET Web 网站的URL重写是提高网站可读性和SEO优化的重要技术手段。在网站开发中,我们常常需要将复杂的、包含参数的URL转换为简洁、友好的格式,以便用户理解和搜索引擎更容易抓取。本文将深入探讨ASP.NET Web...
标题中的“url重写工具”指的是用于转换或重新映射网站URL的一种技术,它能够将不友好的、复杂的URL转化为用户友好的、简洁的形式。在.NET环境中,这通常通过使用IIS(Internet Information Services)的扩展性来...
本文将深入探讨如何在C#中实现对按钮控件(Button)的重写,以创建自定义的“漂亮”按钮。 首先,我们要理解重写(Override)的概念。在面向对象编程中,重写是指子类重新定义父类中的某个方法,以便提供自己的实现...
这就是“重写window.alert方法”的目的。 重写`window.alert()`主要是通过覆盖原有的方法来实现。在JavaScript中,对象的方法是可以被替换的,因此我们可以在全局作用域内定义一个新的`alert`函数,让它执行我们...
根据提供的标题、描述、标签及部分内容,我们可以了解到讨论的主题是“二级域名重写”,下面将对这一主题进行详细的解析。 ### 二级域名重写的概念 首先,我们需要理解什么是二级域名重写。简单来说,二级域名重写...
URL重写是Web开发中的一个重要概念,主要用于优化网站的URL结构,提高用户体验并有利于搜索引擎优化(SEO)。在ASP.NET环境中,Microsoft提供了URL重写模块,使得开发者能够方便地实现URL的美化和管理。本实例主要...
Java 中的 URL 重写 Java 中的 URL 重写是一种常用的技术,它可以将原始的 URL 转换为另一个 URL,以便达到特定的目的。例如,隐藏真实的 URL、实现 URL 的加密、实现 URL 的重定向等。在 Java 中,有多种方式可以...
**IIS URL重写组件详解** IIS(Internet Information Services)是微软提供的一个强大的Web服务器,用于托管网站和应用程序。在IIS中,URL重写组件是一个非常关键的工具,它允许管理员根据预定义的规则改变请求的...
Java重写知识点详解 Java中的重写(Override)和重载(Overload)是两个重要的概念,它们都是指方法的定义方式,但是它们之间存在着明显的区别。 方法的重载 在同一个类中,可以定义多个方法,它们的方法名相同,...
URL重写是Web开发中的一种技术,主要用于优化和简化用户访问网站时的URL结构,使其更易读、更友好。这种技术通常与动态网站或基于框架的应用程序配合使用,例如ASP.NET、PHP、Java等。在本例中,我们将探讨URL重写的...
本教程介绍了U盘量产(重写存储分区)的全过程,在附件内还提供了重写的必要工具:MyDiskTest、FlashGenius、chipgenius。 下载本教程后,可根据doc文档的描述内容进行操作,对U盘重新写入。 本教程常用于: 1,建立...
Nginx 重写规则是Nginx服务器中用于处理URL请求的重要功能,它允许运维人员通过正则表达式来改变请求的URI,实现URL的重定向、路由转发等多种用途。本教程旨在帮助你理解Nginx的重写模块及其相关指令,以便你能独立...
ASP.NET C# URL重写是Web开发中的一个重要概念,它涉及到网站的地址结构优化和搜索引擎友好性提升。在本文中,我们将深入探讨URL重写、地址重写、伪静态以及如何将ASP.NET C#应用程序中的动态页面转换为HTML,以提高...
在C#编程语言中,重写、重载和多态是面向对象编程的三大核心特性,它们对于构建灵活、可扩展的代码结构至关重要。 首先,我们来看“重写”。重写(Override)允许子类对从基类继承来的方法进行重新定义,以便提供...