java多线程线程同步Lock接口示例
时间: 2023-10-07 12:09:21 浏览: 135
下面是一个简单的Java多线程示例,使用Lock接口实现线程同步:
```java
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class ThreadSyncExample {
private Lock lock = new ReentrantLock(); // 创建Lock接口的实例
private int count = 0;
public void increment() {
lock.lock(); // 线程获取锁
try {
count++;
} finally {
lock.unlock(); // 释放锁
}
}
public void decrement() {
lock.lock(); // 线程获取锁
try {
count--;
} finally {
lock.unlock(); // 释放锁
}
}
public int getCount() {
return count;
}
public static void main(String[] args) throws InterruptedException {
ThreadSyncExample example = new ThreadSyncExample();
Thread t1 = new Thread(() -> {
for (int i = 0; i < 100000; i++) {
example.increment(); // 每次增加1
}
});
Thread t2 = new Thread(() -> {
for (int i = 0; i < 100000; i++) {
example.decrement(); // 每次减少1
}
});
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println("Count: " + example.getCount()); // 输出最终结果
}
}
```
在上面的示例中,我们创建了一个`ThreadSyncExample`类,其中包含了一个`Lock`接口的实例`lock`,以及一个`count`变量。`increment()`方法和`decrement()`方法分别用于增加和减少`count`变量的值,这两个方法都使用`lock`来实现线程同步。最后,我们创建了两个线程`t1`和`t2`,分别执行`increment()`方法和`decrement()`方法,最后输出最终的`count`值。
需要注意的是,在使用`Lock`接口时,一定要在`try`块中获取锁,在`finally`块中释放锁,以确保在任何情况下都能正确释放锁。
阅读全文