Java不使用工具类,直接new一个线程池
时间: 2024-05-09 16:18:55 浏览: 11
可以使用Java中的ThreadPoolExecutor类来直接创建一个线程池,不需要使用工具类。
示例代码如下:
```
int corePoolSize = 5;
int maxPoolSize = 10;
long keepAliveTime = 5000;
BlockingQueue<Runnable> queue = new ArrayBlockingQueue<>(100);
ExecutorService executor = new ThreadPoolExecutor(corePoolSize, maxPoolSize, keepAliveTime, TimeUnit.MILLISECONDS, queue);
executor.execute(new Runnable() {
@Override
public void run() {
// 线程执行的代码
}
});
executor.shutdown();
```
在这个示例中,我们创建了一个线程池,其中包含5个核心线程和10个最大线程。如果线程空闲超过5秒钟,它们就会被终止。我们还为线程池指定了一个阻塞队列,该队列最多可以容纳100个任务。最后,我们创建了一个Runnable对象并将其提交给线程池进行执行。
注意,当使用完线程池后,我们需要调用shutdown()方法来关闭线程池,否则程序将一直运行。
相关问题
写一个java线程池工具类
好的,Java线程池是Java提供的一种线程管理机制,通过线程池可以更好地管理系统中的线程。下面我来介绍一下如何编写一个Java线程池工具类。
1. 创建一个ThreadPoolExecutor对象,用于管理线程池。
2. 定义一个任务类,该类实现Runnable接口,并重写run()方法,run()方法中实现具体的任务逻辑。
3. 在工具类中,定义一个execute()方法,用于向线程池提交任务,该方法接收一个Runnable对象作为参数,将该任务提交到线程池中。
4. 定义一个shutdown()方法,用于关闭线程池,该方法调用ThreadPoolExecutor的shutdown()方法即可。
5. 定义一个getActiveCount()方法,用于获取当前活跃的线程数,该方法调用ThreadPoolExecutor的getActiveCount()方法即可。
6. 可以根据需要定义其他方法,如getPoolSize()、getCorePoolSize()等。
下面是一个简单的Java线程池工具类示例:
```
import java.util.concurrent.*;
public class ThreadPoolUtil {
private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
5, // 核心线程数
10, // 最大线程数
60, // 线程空闲时间
TimeUnit.SECONDS, // 线程空闲时间单位
new LinkedBlockingQueue<>(), // 线程池任务队列
Executors.defaultThreadFactory(), // 线程工厂
new ThreadPoolExecutor.AbortPolicy() // 拒绝策略
);
public static void execute(Runnable task) {
threadPool.execute(task);
}
public static void shutdown() {
threadPool.shutdown();
}
public static int getActiveCount() {
return threadPool.getActiveCount();
}
}
```
帮我用java写一个动态线程池工具类
好的,下面是一个简单的动态线程池工具类的 Java 代码实现:
```java
import java.util.concurrent.*;
public class DynamicThreadPool {
private ThreadPoolExecutor executor;
public DynamicThreadPool(int corePoolSize, int maxPoolSize, int queueCapacity) {
executor = new ThreadPoolExecutor(corePoolSize, maxPoolSize, 60L, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(queueCapacity), new ThreadPoolExecutor.CallerRunsPolicy());
}
public void execute(Runnable task) {
executor.execute(task);
}
public void shutdown() {
executor.shutdown();
}
public int getActiveCount() {
return executor.getActiveCount();
}
public int getQueueSize() {
return executor.getQueue().size();
}
public int getMaxPoolSize() {
return executor.getMaximumPoolSize();
}
public void setMaxPoolSize(int maxPoolSize) {
executor.setMaximumPoolSize(maxPoolSize);
}
}
```
这个工具类使用了 Java 中的 `ThreadPoolExecutor` 类来实现线程池。其中,构造函数需要传入三个参数:`corePoolSize` 表示核心线程池大小,`maxPoolSize` 表示最大线程池大小,`queueCapacity` 表示任务队列容量。这个工具类还提供了一些方法,例如 `execute` 方法用来提交任务到线程池中,`shutdown` 方法用来关闭线程池,`getActiveCount` 方法用来获取当前活跃线程数,`getQueueSize` 方法用来获取当前任务队列大小,`getMaxPoolSize` 和 `setMaxPoolSize` 方法用来获取和设置最大线程池大小。