Java并发工具库:ExecutorService、Semaphore等使用
Java并发工具库提供了多种工具来帮助开发者处理多线程编程中的并发问题。以下是ExecutorService
和Semaphore
的一些基本用法:
ExecutorServiceExecutorService
是一个接口,用于管理线程池和执行异步任务。它提供了一种方法来异步执行任务,并且可以控制并发级别。
创建ExecutorService1. 固定大小的线程池:
javaExecutorService executor = Executors.newFixedThreadPool(10); // 创建一个固定大小为10的线程池
2. 可缓存的线程池:
javaExecutorService executor = Executors.newCachedThreadPool(); // 创建一个可根据需要创建新线程的线程池
3. 单线程的ExecutorService:
javaExecutorService executor = Executors.newSingleThreadExecutor(); // 创建一个只有一个线程的ExecutorService
#### 提交任务1. 提交Runnable任务:
java executor.execute(new Runnable() {
@Override public void run() {
//任务代码 }
});
2. 提交Callable任务并获取结果:
java Future<String> future = executor.submit(new Callable<String>() {
@Override public String call() throws Exception {
//任务代码 return "result";
}
});
String result = future.get(); // 获取任务结果
#### 关闭ExecutorService1. 关闭ExecutorService以不接受新任务:
java executor.shutdown(); // 不再接受新任务,但已提交的任务会继续执行
2. 立即关闭ExecutorService:
java executor.shutdownNow(); //尝试立即停止所有正在执行的任务,并返回等待执行的任务列表
### SemaphoreSemaphore
是一个计数信号量,用于控制对资源的访问,确保同时只有一定数量的线程可以访问某个特定资源。
创建Semaphore1. 创建一个Semaphore:
javaSemaphore semaphore = new Semaphore(3); // 创建一个计数为3的Semaphore
#### 使用Semaphore1. 获取许可:
java semaphore.acquire(); // 获取一个许可,如果不可用,则等待
2. 释放许可:
java semaphore.release(); //释放一个许可
3. 尝试获取许可:
javaif (semaphore.tryAcquire()) {
// 如果成功获取许可,则执行代码 try {
//需要执行的代码} finally {
semaphore.release(); //确保释放许可 }
} else {
// 获取许可失败的处理 }
这些是ExecutorService
和Semaphore
的基本用法。在实际应用中,你可能需要根据具体需求调整线程池的大小、任务的提交方式以及资源的访问控制。
还没有评论,来说两句吧...