Java中如何获取线程的锁或释放锁
时间: 2024-06-11 14:10:18 浏览: 5
Java中获取线程的锁或释放锁是通过synchronized关键字实现的。synchronized关键字可以用来修饰方法或代码块,以保证在同一时刻只有一个线程可以访问共享资源。
获取锁:当一个线程进入synchronized修饰的方法或代码块时,它会尝试获取锁。如果锁没有被其他线程占用,则该线程会立即获得锁,并进入临界区。如果锁已经被其他线程占用,则该线程会进入阻塞状态,直到锁被释放。
释放锁:当一个线程执行完synchronized修饰的方法或代码块后,它会自动释放锁。其他线程此时可以尝试获取锁,并进入临界区。
例如,下面的代码演示了如何使用synchronized获取锁和释放锁:
```
public class MyThread implements Runnable {
private int count = 0;
public synchronized void run() {
for (int i = 0; i < 5; i++) {
count++;
System.out.println(Thread.currentThread().getName() + ": " + count);
}
}
public static void main(String[] args) {
MyThread myThread = new MyThread();
Thread thread1 = new Thread(myThread);
Thread thread2 = new Thread(myThread);
thread1.start();
thread2.start();
}
}
```
在上面的代码中,MyThread实现了Runnable接口,并重写了run()方法,并在该方法上加上了synchronized关键字。在main方法中,我们创建了两个线程,并将它们都传入了MyThread对象中。当线程开始执行时,它们会尝试获取锁,并进入临界区。由于只有一个线程可以获取到锁,因此线程的执行顺序是不确定的。当一个线程执行完run()方法后,它会自动释放锁,另一个线程则可以获取到锁并执行run()方法。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)