首页 > 编程语言 >Java基础 Lock 锁

Java基础 Lock 锁

时间:2023-10-27 21:22:17浏览次数:32  
标签:Java Lock 代码 基础 try finally new Ticket ticket

 

代码示例:

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

相关文章

  • Java基础 同步方法
    同步代码块就是把一段代码给锁起来,这样就可以解决多线程操作共享数据时带来的数据安全问题但是如果我们想要把一个方法里面所有的代码全都锁起来,就没有必要用同步代码块了,我们可以直接把synchronized加在方法上,这个方法就叫做同步方法 同步方法的格式:修饰符 synchroniz......
  • 学习如何新建java项目
    java的程序的运行机制编译型:全局翻译解释型:实时更新 在idea写下hello,world[破解激活码] IDEA2023.2.3最新激活码,注册码(亲测好用)-异常教程(exception.site) 新建一个文件夹 在文件夹新建一个class  Java语法创建一个新项目(重要)project->Empty......
  • 2023-2024 20231302《计算机基础与程序设计》第五周学习总结
    作业信息这个作业属于哪个课程2022-2023-1-计算机基础与程序设计这个作业要求在哪里2022-2023-1计算机基础与程序设计第五周作业这个作业的目标Pep/9虚拟机、机器语言与汇编语言、算法与伪代码、测试:黑盒,白盒作业正文https://www.cnblogs.com/9q2z2z/p/1779236......
  • 2023-2024-1 20231402《计算机基础与程序设计》第5周学习总结
    2023-2024-120231402《计算机基础与程序设计》第5周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第5周作业这个作业的目标自学计算机科学概论第6章,《C语言程序设计》第4章作业正......
  • Java基础 同步代码块
    同步代码块:利用同步代码块把操作共享数据的代码给锁起来,让同步代码块里面的代码是轮流去执行的 格式:synchronized(锁对象){   操作共享数据的代码} 细节:1.在最初,锁的状态是默认打开的,如果有一个线程进去了,锁就会自动关闭2.当锁里面全部代码都执行完毕了,线程......
  • [ApacheCommon组件使用-IO]关于JavaIO,相当输入的一个工具就是ApacheCommon-IO
    1.首先,如果你使用的是maven或者gradle建立的项目,maven只需要<!--https://mvnrepository.com/artifact/commons-io/commons-io--><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId>......
  • aardio调用java语言
    一、引入java默认只要在aardio中调用importjava;就会自动搜索系统可用的JRE,如果没有找到JRE,会自动导入java.jre.v8扩展库,并自动安装OpenJDKJREv8 。注:如果系统已经安装了java6,就会用系统自带的java6,而不会自动安装OpenJDKJREv8。项目经验:项目开发过程中就遇......
  • JavaSeript在发送AJAX请家时,URL的域名地址是使用绝对地址还是相对地呲?
    在发送AJAX请求时,URL的域名地址可以使用绝对地址或相对地址。绝对地址包含完整的协议、域名和路径,例如:http://example.com/api/data。这种方式适用于需要请求不同域名下的数据的情况。使用绝对地址时,可以确保请求准确地发送到指定的服务器。相对地址只包含相对于当......
  • javaweb学习每日总结-第七天
    第七天学习Mvn模式和三层架构今天回顾了开发的三层框架,做了一个完成一点的小案例,也是亲自感受了一下做项目的一个大概的流程,想要清楚的做完一个项目,那么对流程的安排是至关重要的,下面说说我个人的理解,首先是关注数据库,没有数据一切白搭,在数据库里建好所需的表是第一步,第二步则是......
  • Java基础 线程的生命周期
      1.当创建线程对象的时候,是新建状态2.新建完之后调用start()方法就变成了就绪状态(是在调用完了start()方法之后才变成了就绪状态)。在就绪状态下,线程开始抢夺CPU的执行权。注意是正在抢,还没有抢到,没抢到就无法执行代码。所以就绪状态有执行资格,但没有执行权(有执行......