📜  Java并发-执行程序接口(1)

📅  最后修改于: 2023-12-03 15:16:35.484000             🧑  作者: Mango

Java并发-执行程序接口

Java并发程序中,一般通过执行程序接口来启动和管理线程。执行程序接口通常有两种:ExecutorExecutorService

Executor

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

ExecutorServiceExecutor接口的扩展,它提供了更丰富的线程管理功能,如线程池、任务队列、线程等待和回收等。它定义了一组方法,可以提交任务和等待已提交的任务完成等。

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接口可以更丰富的管理任务和线程。程序员可以根据自己的需要选择不同的接口来实现并发程序的管理。