编程线程池怎么用

时间:2025-03-01 09:06:51 明星趣事

使用线程池可以显著提高多线程应用程序的性能和效率。线程池通过复用线程减少了创建和销毁线程的开销,并且可以更好地控制系统资源的利用。下面我将介绍如何在不同编程语言中使用线程池。

C++ 线程池示例

```cpp

include

include

include

include

include

include

class ThreadPool {

private:

std::vector workers;

std::queue> tasks;

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 lock(queue_mutex);

stop = true;

}

condition.notify_all();

for (std::thread &worker : workers) {

if (worker.joinable()) {

worker.join();

}

}

}

void enqueue(std::function task) {

{

std::unique_lock lock(queue_mutex);

tasks.push(std::move(task));

}

condition.notify_one();

}

private:

void worker() {

while (true) {

std::function task;

{

std::unique_lock lock(queue_mutex);

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 线程池示例