Java基础 Lock 锁

发布时间 2023-10-27 21:20:56作者: 嘎嘎鸭2

 

代码示例:

package pojo;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class Ticket extends Thread{
public static Integer ticket = 1;

//创建锁的对象
static Lock lock = new ReentrantLock();

@Override
public void run() {
while (true) {
//加锁
lock.lock();

try {
if(ticket > 100) break;
Thread.sleep(10);
System.out.println(getName() + "第" + ticket + "张票");
ticket++;
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
//释放锁
lock.unlock();
}

}
}
}
-------------------------------------------------------------------
public static void main(String[] args) throws Exception {
Ticket t1 = new Ticket();
Ticket t2 = new Ticket();
Ticket t3 = new Ticket();

t1.start();
t2.start();
t3.start();
}

 

补充知识点:

在Java中,当在一个死循环中使用try-catch-finally块时,如果try块中的代码遇到break语句,程序会立即跳出循环,并且finally块中的代码也会在跳出循环之前执行。finally块中的代码总是在退出try块时执行,不论是正常退出还是异常退出。

以下是一个示例,演示了这个行为:

while (true) {
try {
// 一些代码
if (某个条件) {
break; // 跳出循环
}
} catch (Exception e) {
// 异常处理
} finally {
// 这里的代码会在跳出循环之前执行
}
}

无论循环是通过break语句正常退出还是通过异常退出,finally块中的代码都会在退出循环之前执行。这是finally块的关键特性,确保资源得到正确释放,例如文件关闭、数据库连接关闭、释放锁等。