java lock小demo
时间: 2023-08-23 14:06:04 浏览: 48
好的,这里是一个简单的 Java Lock 示例:
```java
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class LockDemo {
private Lock lock = new ReentrantLock();
private int count = 0;
public void increment() {
lock.lock();
try {
count++;
} finally {
lock.unlock();
}
}
public int getCount() {
return count;
}
public static void main(String[] args) throws InterruptedException {
LockDemo lockDemo = new LockDemo();
Thread t1 = new Thread(() -> {
for (int i = 0; i < 100000; i++) {
lockDemo.increment();
}
});
Thread t2 = new Thread(() -> {
for (int i = 0; i < 100000; i++) {
lockDemo.increment();
}
});
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println(lockDemo.getCount());
}
}
```
该示例使用 `ReentrantLock` 实现了一个简单的计数器,`increment()` 方法使用 `lock()` 获取锁,执行累加操作后使用 `unlock()` 释放锁。在 `main()` 方法中创建了两个线程,分别调用 `increment()` 方法累加计数器,最后输出计数器的值。
使用 `Lock` 比使用 `synchronized` 更加灵活,可以通过 `tryLock()` 方法尝试获取锁而不会被阻塞。同时,`Lock` 还提供了更多的高级特性,如公平性、可重入锁等。但是,相对于 `synchronized`,`Lock` 的使用需要更多的代码量。