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 task = new WorkerThread("Task " + i);
            executor.execute(task);
        }

        executor.shutdown();
        while (!executor.isTerminated()) {
            // 等待所有任务完成
        }
        System.out.println("所有任务已完成");
    }
}

class WorkerThread implements Runnable {
    private String taskName;

    public WorkerThread(String taskName) {
        this.taskName = taskName;
    }

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + " 开始执行 " + taskName);

        try {
            // 模拟任务执行时间
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println(Thread.currentThread().getName() + " 完成任务 " + taskName);
    }
}

以上是一个简单的多线程编程的例子,利用Java的线程池实现了任务的并行执行。在主函数中,通过ExecutorService创建了一个固定大小为5的线程池,然后循环提交了10个任务给线程池执行。

WorkerThread类实现了Runnable接口,定义了任务的执行逻辑。每个任务在执行前输出开始执行的提示,然后模拟任务执行时间,最后输出任务完成的提示。

为了保证所有任务执行完毕,主线程在执行完循环提交任务的操作后,调用shutdown()方法关闭线程池,并使用isTerminated()检测线程池是否终止。在所有任务完成后,输出所有任务已完成的提示。

通过合理使用线程池,可以提高程序的性能和响应速度,避免过多线程的创建和销毁造成的资源浪费。多线程编程是Java开发中常见的需求,掌握多线程编程实战经验对于提升开发效率和系统性能至关重要。