📅  最后修改于: 2023-12-03 15:16:35.484000             🧑  作者: Mango
Java并发程序中,一般通过执行程序接口来启动和管理线程。执行程序接口通常有两种:Executor
和ExecutorService
。
Executor
是一个执行程序接口,它仅包含一个方法:
void execute(Runnable command);
该方法的作用是接受一个Runnable
任务,然后在一个可用的线程上执行该任务。例如:
Executor executor = new Executor() {
public void execute(Runnable command) {
new Thread(command).start();
}
};
executor.execute(new Runnable() {
public void run() {
System.out.println("Hello World!");
}
});
此时,程序会启动一个新线程来执行输出语句。通过Executor
接口,可以轻松地启动线程,但无法获知线程是否已经执行完毕。
ExecutorService
是Executor
接口的扩展,它提供了更丰富的线程管理功能,如线程池、任务队列、线程等待和回收等。它定义了一组方法,可以提交任务和等待已提交的任务完成等。
ExecutorService
的创建方式有多种,最常用的是通过Executors
类的工厂方法创建。例如:
ExecutorService executor = Executors.newFixedThreadPool(10);
这里使用newFixedThreadPool
方法创建一个固定大小的线程池,线程池中有10个线程。接下来可以通过submit
方法向线程池提交任务:
executor.submit(new Runnable() {
public void run() {
System.out.println("Hello World!");
}
});
此时,程序会将任务提交到线程池,由线程池中一个可用的线程执行。
当需要等待所有任务执行完毕时,可以调用shutdown
方法来关闭线程池,然后使用awaitTermination
方法等待所有任务执行完毕。例如:
executor.shutdown();
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
此时,程序会等待线程池中所有任务执行完毕后才会继续执行后面的代码。
执行程序接口可以帮助程序员轻松地创建和管理线程。通过Executor
接口可以启动简单的异步任务,而通过ExecutorService
接口可以更丰富的管理任务和线程。程序员可以根据自己的需要选择不同的接口来实现并发程序的管理。