lock 中断阻塞的线程 java代码
时间: 2023-07-09 15:40:16 浏览: 93
Java多线程编程之Lock用法实例
以下是一个简单的示例代码,演示如何使用 Java 的 `Lock` 接口来阻塞线程:
```java
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class LockExample {
// 创建一个 Lock 对象
private Lock lock = new ReentrantLock();
// 定义一个线程函数
private void worker() {
// 获取锁
lock.lock();
System.out.println("线程开始执行");
// 执行一些耗时的操作
for (int i = 0; i < 10000000; i++) {
// do something
}
System.out.println("线程执行完毕");
// 释放锁
lock.unlock();
}
public static void main(String[] args) {
LockExample example = new LockExample();
// 创建两个线程并启动
Thread t1 = new Thread(() -> {
example.worker();
});
Thread t2 = new Thread(() -> {
example.worker();
});
t1.start();
t2.start();
}
}
```
在这个示例代码中,我们首先创建了一个 `Lock` 对象 `lock`,并在 `worker()` 方法中使用 `lock.lock()` 获取锁,使用 `lock.unlock()` 释放锁。这样,当一个线程获取到锁之后,另一个线程就无法获取到锁,从而被阻塞。当第一个线程释放锁之后,第二个线程才能获取到锁并开始执行。
需要注意的是,使用锁来阻塞线程时,要确保获取锁和释放锁的代码都能被正确执行,否则可能会导致线程一直阻塞。另外,Java 中的锁也只能在同一个进程内起作用,如果需要跨进程同步,可以考虑使用其他的同步机制,如信号量、事件等。
阅读全文