多线程并发控制:Java并发工具包实战实例

原创 刺骨的言语ヽ痛彻心扉 2024-09-27 13:06 195阅读 0赞

在Java中,多线程并发控制是非常关键的一部分。Java提供了一个强大的并发工具包——java.util.concurrent和java.util.concurrent.atomic。

下面是一些Java并发工具包实战实例:

  1. 线程池
    ```java
    // 创建一个固定大小的线程池
    ThreadPoolExecutor executor = new ThreadPoolExecutor(2, 2, TimeUnit.SECONDS, new ArrayBlockingQueue<>(5)); // 线程池提交任务

executor.execute(new Runnable() {
@Override
public void run() {
System.out.println(“Task executed by thread: “ + Thread.currentThread().getName());
}
}));

executor.shutdown(); // 关闭线程池

  1. 2. **同步工具**:
  2. - `synchronized`关键字用于实现互斥锁(Lock)。
  3. ```java
  4. class Counter {
  5. private int count = 0;
  6. synchronized void increment() {
  7. count++;
  8. }
  9. synchronized int getCount() {
  10. return count;
  11. }
  12. }
  13. // 使用示例
  14. Counter counter = new Counter();
  15. counter.increment(); // 调用同步方法,互斥锁锁定
  16. counter.increment(); // 同理,再次锁定互斥锁
  17. System.out.println(counter.getCount()); // 输出:2
  18. counter.decrement(); // 准备释放互斥锁(解锁)
  19. System.out.println(counter.getCount()); // 可能输出:1 或 0(取决于释放顺序和资源状况)
  20. counter.notifyAll(); // 安排所有等待的线程继续执行
  1. 原子操作工具
  • java.util.concurrent.atomic提供了一种声明单个原子变量的方法。
    ```java
    import java.util.concurrent.atomic.AtomicInteger;

public class AtomicExample {
private AtomicInteger count = new AtomicInteger(0);

  1. public void increment() {
  2. count.incrementAndGet(); // 原子操作,不会被中断
  3. }
  4. public int getCount() {
  5. return count.get(); // 获取原值
  6. }

}

// 使用示例
AtomicExample atomicExample = new AtomicExample();
atomicExample.increment(); // 原子操作,无需等待结果
System.out.println(atomicExample.getCount()); // 输出:1

atomicExample.decrement(); // 准备释放原子变量(解锁)
System.out.println(atomicExample.getCount())); // 可能输出:0 或 1(取决于释放顺序和资源状况)

atomicExample.notifyAll(); // 安排所有等待的线程继续执行
```

这些实例展示了如何在Java中使用多线程并发控制工具。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,195人围观)

还没有评论,来说两句吧...

相关阅读

    相关 实战案例:Java线并发控制

    在Java中,多线程并发控制是非常重要的,因为它能有效利用多核处理器的优势,提高程序执行效率。但同时也可能带来数据一致性问题和竞态条件。 下面是一个简单的Java多线程并发控

    相关 Java线并发控制问题实例

    在Java多线程编程中,经常会出现并发控制问题。以下是一个具体的例子: 案例:银行的存款系统 假设我们有一个简单的银行存款系统,由一个主线程(如服务端)和多个客户端线程共同