代码示例:
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
块的关键特性,确保资源得到正确释放,例如文件关闭、数据库连接关闭、释放锁等。
标签:Java,Lock,代码,基础,try,finally,new,Ticket,ticket From: https://www.cnblogs.com/gagaya2/p/17793171.html