`

如何给线程池命名

阅读更多

        在系统运行后,在线程快照里总是看到线程池的名字为pool-xx,这样导致很不好定位,怎么给线程池一个有意义的名字呢。参照ThreadPoolExecutor类的ThreadFactory,自己实现ThreadFactory接口,重写newThread方法即可。参考代码如下:

   

public class NamedThreadFactory implements ThreadFactory
{
	private static final AtomicInteger POOL_SEQ = new AtomicInteger(1);

	private final AtomicInteger mThreadNum = new AtomicInteger(1);

	private final String mPrefix;

	private final boolean mDaemo;

	private final ThreadGroup mGroup;

	public NamedThreadFactory()
	{
		this("pool-" + POOL_SEQ.getAndIncrement(),false);
	}

	public NamedThreadFactory(String prefix)
	{
		this(prefix,false);
	}

	public NamedThreadFactory(String prefix,boolean daemo)
	{
		mPrefix = prefix + "-thread-";
		mDaemo = daemo;
        SecurityManager s = System.getSecurityManager();
        mGroup = ( s == null ) ? Thread.currentThread().getThreadGroup() : s.getThreadGroup();
	}

	public Thread newThread(Runnable runnable)
	{
		String name = mPrefix + mThreadNum.getAndIncrement();
        Thread ret = new Thread(mGroup,runnable,name,0);
        ret.setDaemon(mDaemo);
        return ret;
	}

	public ThreadGroup getThreadGroup()
	{
		return mGroup;
	}
}

 

 

分享到:
评论

相关推荐

    c#线程池使用demo

    首先,线程池主要由System.Threading命名空间下的ThreadPool类提供。在C#中,我们可以通过以下方式向线程池提交任务: ```csharp ThreadPool.QueueUserWorkItem(new WaitCallback(YourMethod)); ``` 在这里,`...

    简单的线程池的.net实现

    当任务到达时,线程池会检查是否有空闲线程可供使用,如果有的话,就直接分配给任务;如果没有,它会根据预设策略创建新线程或等待现有任务完成。这种方式避免了频繁创建和销毁线程带来的开销,减少了系统的上下文...

    C# 线程池使用示例

    1. 引入System.Threading命名空间。 2. 定义要执行的任务方法。 3. 在Main方法中调用ThreadPool.QueueUserWorkItem,并传递任务方法。 示例代码: ```csharp using System; using System.Threading; class Program...

    .net 智能线程池 SmartThreadPool

    9. **工作线程的命名**:为线程池中的线程指定名字,便于调试和日志记录。 10. **线程池的启动和关闭**:可以控制线程池的启动和关闭,使得在应用程序的生命周期中能更好地管理资源。 SmartThreadPool-2.2.1.0这个...

    C# ——自定义线程池

    在自定义线程池的设计中,我们需要考虑如何合理分配任务给线程,如何跟踪线程的状态,以及在任务完成后如何回收线程。 自定义线程池的关键步骤可能包括: 1. 初始化线程池:根据系统资源或用户配置设定线程池的初始...

    spring 线程池

    4. **threadFactory**:创建线程的工厂,可以自定义线程的命名规则、线程优先级等。 5. **rejectedExecutionHandler**:当线程池和队列都满时,新提交的任务将由拒绝策略来处理。常见的拒绝策略有抛出异常、直接忽略...

    Java面试常见问题总结(2024最新版)

    12. **给线程池命名的原因:** - 便于识别和管理不同用途的线程池。 - 在日志记录和监控方面更有意义。 13. **动态修改线程池参数的方法:** - 通过`ThreadPoolExecutor`类提供的方法(如`setCorePoolSize`等)...

    自定义线程池

    - 使用接口:通过`using`指令引入相关命名空间,找到并实例化自定义线程池类。 - 提交任务:调用自定义线程池的相应方法(可能类似于`QueueTask`或`Execute`)来提交任务。 - 关闭线程池:当所有任务完成后,记得...

    Tomcat6.0共享线程池配置

    - **namePrefix**:为线程命名提供前缀,例如第一个线程名为 `catalina-exec-1`,第二个线程名为 `catalina-exec-2`。 - **maxThreads**:线程池允许的最大线程数,这里设置为1000。 - **minSpareThreads**:线程池...

    云外归鸟的线程池支持库

    5. **线程工厂**:线程池允许用户自定义线程的创建方式,比如设置线程的优先级、命名规则等,以满足特定需求。 6. **线程执行器接口**:在Java中,`java.util.concurrent.ExecutorService`接口代表了线程池,它提供...

    线程池demo

    你可以为线程设置特定的属性,如优先级、命名规则等。 4. **拒绝策略**:当线程池和任务队列都满载时,如果仍有新任务提交,线程池需要采取一定的策略来处理这些无法处理的任务。Java的`ExecutorService`提供了几种...

    线程池详解:线程池七大核心参数、线程池工作原理、线程池的创建方式、线程池的拒绝策略、如何合理分配线程池大小

    6. threadFactory:线程工厂,用于创建新线程,可以自定义线程的命名、优先级等属性。 7. handler:拒绝策略,当线程池和任务队列都满时,新提交的任务的处理方式,常见的拒绝策略有AbortPolicy、CallerRunsPolicy、...

    C# 线程池的使用 高级应用

    在C#中,我们可以使用System.Threading命名空间中的ThreadPool类来访问和操作线程池。以下是一些关键的线程池方法: 1. `ThreadPool.QueueUserWorkItem`: 这是最常用的方法,用于向线程池提交一个工作项。它接受一...

    java线程池实例

    6. `threadFactory`: 用于创建新线程的工厂,可以自定义线程的命名、优先级等。 7. `handler`: 当线程池无法接受新任务时,例如达到最大线程数且队列已满,可以通过`RejectedExecutionHandler`进行异常处理。 ...

    java线程池的源码分析.zip

    6. **线程工厂**(`ThreadFactory`):线程工厂允许自定义线程的创建过程,如命名、设置优先级、初始化线程属性等。默认的线程工厂是`Executors.defaultThreadFactory()`,可以通过实现`newThread(Runnable r)`方法...

    C# 简单MSSQL线程池+异步SOCKET服务端完整源码

    在C#中,线程池是System.Threading命名空间的一部分,通过ThreadPool类提供。线程池会自动管理和调度线程,以执行大量的短期任务。使用线程池而不是每次需要时创建新线程,可以提高性能,因为线程池中的线程可以重用...

    java 线程池

    6. **线程工厂(ThreadFactory)**:用于创建新线程,可以自定义线程的命名、线程优先级等属性。 7. **拒绝策略(RejectedExecutionHandler)**:当线程池和任务队列都满时,新任务的处理策略。常见的策略有抛出异常...

    C# CLR原理与线程池详解

    ### C# CLR原理与线程池详解 #### 一、CLR与.NET框架 **CLR**(Common ...通过掌握MSIL、程序集、CTS、元数据、反射、命名空间和线程池等概念,开发者可以更好地利用.NET框架的强大功能,构建高质量的应用程序。

    c#多线程以及线程池的学习

    在C#中,可以使用`System.Threading`命名空间中的`Thread`类来创建和管理线程。创建一个新线程的基本步骤如下: 1. 定义一个包含业务逻辑的方法,这个方法将在新线程上运行。 2. 创建`Thread`对象,并传入这个方法...

    微软的线程池API ThreadPool

    通过`ThreadPool.QueueUserWorkItem`方法,可以将一个`WaitCallback`委托传递给线程池,该委托包含了要执行的任务。线程池会根据其内部策略决定何时以及如何运行这些任务,这样可以避免频繁创建和销毁线程。 2. **...

Global site tag (gtag.js) - Google Analytics