使用线程池可以显著提高多线程应用程序的性能和效率。线程池通过复用线程减少了创建和销毁线程的开销,并且可以更好地控制系统资源的利用。下面我将介绍如何在不同编程语言中使用线程池。
C++ 线程池示例
```cpp
include include include include include include class ThreadPool { private: std::vector std::queue std::mutex queue_mutex; std::condition_variable condition; bool stop; public: ThreadPool(size_t threads) : stop(false) { for (size_t i = 0; i < threads; ++i) { workers.emplace_back(&ThreadPool::worker, this); } } ~ThreadPool() { { std::unique_lock stop = true; } condition.notify_all(); for (std::thread &worker : workers) { if (worker.joinable()) { worker.join(); } } } void enqueue(std::function { std::unique_lock tasks.push(std::move(task)); } condition.notify_one(); } private: void worker() { while (true) { std::function { std::unique_lock condition.wait(lock, [this] { return stop || !tasks.empty(); }); if (stop && tasks.empty()) { return; } task = std::move(tasks.front()); tasks.pop(); } task(); } } }; int main() { ThreadPool pool(4); for (int i = 0; i < 8; ++i) { pool.enqueue([i] { std::cout << "Task "<< i << " started" << std::endl; std::this_thread::sleep_for(std::chrono::seconds(1)); std::cout << "Task "<< i << " completed" << std::endl; }); } return 0; } ``` Java 线程池示例 ```java import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadPoolExample { public static void main(String[] args) { // 创建一个固定大小的线程池 ExecutorService executorService = Executors.newFixedThreadPool(5); // 提交任务到线程池 for (int i = 0; i < 10; i++) { Runnable task = new MyTask(i); executorService.submit(task); } // 关闭线程池 executorService.shutdown(); } } class MyTask implements Runnable { private int taskId; public MyTask(int taskId) { this.taskId = taskId; } @Override public void run() { System.out.println("Task " + taskId + " started"); try { Thread.sleep(1000); // 模拟耗时操作 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Task " + taskId + " completed"); } } ``` Python 线程池示例