java线程池的使用例子
时间: 2023-06-30 18:21:06 浏览: 113
好的,下面是 Java 线程池的使用例子:
1. 创建线程池
```java
ExecutorService executor = Executors.newFixedThreadPool(5);
```
这里创建了一个固定大小为 5 的线程池。
2. 提交任务
```java
executor.submit(new Runnable() {
public void run() {
// 任务代码
}
});
```
这里提交了一个 Runnable 任务,线程池会自动分配线程来执行该任务。
3. 关闭线程池
```java
executor.shutdown();
```
这里关闭了线程池,等待所有任务执行完毕后才会真正关闭线程池。
以上就是 Java 线程池的使用例子,希望能对你有所帮助!
相关问题
Java 线程池代码例子
以下是一个 Java 线程池的代码例子:
```java
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolExample {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(5);
for (int i = 0; i < 10; i++) {
Runnable worker = new WorkerThread("" + i);
executor.execute(worker);
}
executor.shutdown();
while (!executor.isTerminated()) {
}
System.out.println("Finished all threads");
}
}
class WorkerThread implements Runnable {
private String message;
public WorkerThread(String s) {
this.message = s;
}
public void run() {
System.out.println(Thread.currentThread().getName() + " (Start) message = " + message);
processMessage();
System.out.println(Thread.currentThread().getName() + " (End)");
}
private void processMessage() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
```
这个例子创建了一个固定大小为 5 的线程池,然后提交了 10 个任务给线程池执行。每个任务都是一个 WorkerThread 对象,它会打印出自己的编号,然后休眠 2 秒钟。最后,主线程等待所有任务执行完毕后输出 "Finished all threads"。
Java 线程池initialze
Java线程池是使用线程池执行提交任务的一种方式,它能够有效地控制线程的最大数量,管理线程的生命周期,并且减少资源消耗。在Java中,线程池可以通过java.util.concurrent.Executor框架来实现,其核心接口是Executor,具体实现包括ExecutorService和ThreadPoolExecutor等。
ThreadPoolExecutor是线程池实现中最灵活的一个,它提供了许多用于配置线程池行为的参数。初始化线程池主要通过其构造函数来完成,构造函数的参数包括:
1. corePoolSize:核心线程数,这是维护的线程池大小,即使它们是空闲的,也会保留在池中。
2. maximumPoolSize:最大线程数,当任务量超过核心线程数处理能力时,线程池会增加工作线程,直到这个上限。
3. keepAliveTime:非核心线程的存活时间,当线程池中的线程数量大于核心线程数时,如果多余的空闲线程空闲时间超过这个值,则会被终止。
4. unit:keepAliveTime参数的时间单位。
5. workQueue:任务队列,用于存放等待执行的任务。
6. threadFactory:用于创建新线程的线程工厂。
7. handler:饱和策略处理器,当队列和最大线程池都满了之后,使用此策略处理新提交的任务。
一个简单的线程池初始化示例如下:
```java
import java.util.concurrent.*;
public class ThreadPoolExample {
public static void main(String[] args) {
// 创建一个固定大小的线程池
int corePoolSize = 5;
int maximumPoolSize = 10;
long keepAliveTime = 60;
TimeUnit unit = TimeUnit.SECONDS;
BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<>(10);
ThreadFactory threadFactory = Executors.defaultThreadFactory();
RejectedExecutionHandler handler = new ThreadPoolExecutor.AbortPolicy();
ThreadPoolExecutor executor = new ThreadPoolExecutor(
corePoolSize,
maximumPoolSize,
keepAliveTime,
unit,
workQueue,
threadFactory,
handler
);
// 使用线程池执行任务
for (int i = 0; i < 10; i++) {
final int taskNumber = i;
executor.execute(() -> {
System.out.println("Executing task " + taskNumber);
});
}
// 关闭线程池
executor.shutdown();
}
}
```
在上面的例子中,我们创建了一个核心线程数为5,最大线程数为10的线程池,并指定了一个60秒的非核心线程存活时间。任务队列使用了有界队列LinkedBlockingQueue,线程工厂使用默认的工厂,饱和策略使用了默认的AbortPolicy,意味着当任务被拒绝时会抛出RejectedExecutionException异常。
阅读全文