写一个juc案例
时间: 2023-11-28 18:49:37 浏览: 98
好的,以下是一个简单的 JUC(Java Util Concurrent)案例:
```java
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class JucExample {
private static int counter = 0;
private static Lock lock = new ReentrantLock();
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(() -> {
for (int i = 0; i < 10000; i++) {
increment();
}
});
Thread t2 = new Thread(() -> {
for (int i = 0; i < 10000; i++) {
increment();
}
});
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println("Counter: " + counter);
}
private static void increment() {
lock.lock();
try {
counter++;
} finally {
lock.unlock();
}
}
}
```
这个案例展示了如何使用 JUC 中的 `Lock` 接口实现线程安全的计数器。在 `increment()` 方法中,我们首先获取锁,然后执行计数器加一的操作,最后释放锁。这样可以确保在任何时候只有一个线程可以访问计数器,从而避免了竞态条件和数据不一致的问题。
在 `main()` 方法中,我们创建了两个线程并启动它们,每个线程都会执行 10000 次计数器加一的操作。我们使用 `join()` 方法等待这两个线程执行完毕,然后输出计数器的值。
这个案例只是一个简单的示例,JUC 还提供了很多其他可用于实现并发编程的接口和类,例如 `Semaphore`、`CountDownLatch`、`CyclicBarrier` 等。
阅读全文