package locks; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.concurrent.locks.Lock; public class LockTest { private static final int threadInitNumber = 10; private static final Lock lock = new java.util.concurrent.locks.ReentrantLock(); private List<String> list = new ArrayList<String>(); public static void main(String[] args){ final LockTest lockTest = new LockTest(); for(int i=0;i<threadInitNumber;i++){ new Thread(new Runnable(){ @Override public void run() { lockTest.insert(Thread.currentThread()); } }).start(); } } public void insert(Thread thread){ lock.lock(); //获取锁 try{ System.out.println(thread.getName() + "获得了锁..."); list.add(String.valueOf(new Random().nextInt(10))); }finally{ System.out.println(thread.getName() + "释放锁..."); lock.unlock(); } } }
package locks; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.concurrent.locks.Lock; public class TryLockTest { private static final int threadInitNumber = 10; private static final Lock lock = new java.util.concurrent.locks.ReentrantLock(); private List<String> list = new ArrayList<String>(); public static void main(String[] args){ final TryLockTest lockTest = new TryLockTest(); for(int i=0;i<threadInitNumber;i++){ new Thread(new Runnable(){ @Override public void run() { try { lockTest.insert(Thread.currentThread()); } catch (InterruptedException e) { e.printStackTrace(); System.out.println(Thread.currentThread() + "线程被中断..."); } } }).start(); } } public void insert(Thread thread) throws InterruptedException{ //获取锁 //注意,如果需要正确中断等待锁的线程,必须将获取锁放在外面,然后将InterruptedException抛出 lock.lockInterruptibly(); try{ System.out.println(thread.getName() + "获得了锁..."); while(true){ list.add(String.valueOf(new Random().nextInt(10))); } }finally{ System.out.println(thread.getName() + "释放锁..."); lock.unlock(); } } }
package locks; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.concurrent.locks.Lock; public class LockInterruptiblyTest { private static final int threadInitNumber = 10; private static final Lock lock = new java.util.concurrent.locks.ReentrantLock(); private List<String> list = new ArrayList<String>(); public static void main(String[] args){ final LockInterruptiblyTest lockTest = new LockInterruptiblyTest(); for(int i=0;i<threadInitNumber;i++){ new Thread(new Runnable(){ @Override public void run() { lockTest.insert(Thread.currentThread()); } }).start(); } } public void insert(Thread thread){ //获取锁 if(lock.tryLock()){ try{ System.out.println(thread.getName() + "获得了锁..."); list.add(String.valueOf(new Random().nextInt(10))); }finally{ System.out.println(thread.getName() + "释放锁..."); lock.unlock(); } } //未获取锁 else{ System.out.println("未获取锁"); } } }
相关推荐
sunoAI确实厉害
12-7平面光栅衍射
黄昏失焦7话 完结+番外.dzip
您可以按照以下步骤下载、配置和使用Elasticsearch数据库: 下载Elasticsearch数据库 访问Elasticsearch官方网站:https://www.elastic.co/downloads/elasticsearch 根据您的操作系统选择合适的版本并下载安装包(通常为zip或tar.gz格式)。 配置Elasticsearch数据库 解压下载的安装包到您想要安装Elasticsearch的目录。 进入Elasticsearch的config目录,找到elasticsearch.yml文件,用文本编辑器打开。 根据您的需求修改elasticsearch.yml文件中的配置,如端口、集群名称、数据存储路径等。 保存并关闭elasticsearch.yml文件。 启动Elasticsearch数据库 打开命令行工具,切换到Elasticsearch的bin目录。 运行以下命令启动Elasticsearch: ./elasticsearch 等待一段时间,直到Elasticsearch成功启动。您可以通过访问http://localhost:9200来验证是否正常
Mines Cleaner Setup X64 v1.3.exe
智慧城市运营智慧交通总体详细设计方案[532页]
深圳广田集团股份有限公司盈利能力分析.docx
5-2.PPT
关于企业数字化转型的认识两个材料.pptx
Python搜索文件并复制到指定文件夹
2024【2021-2023年】理科报考及录取统计.pdf.apk
Python项目开发实战:工厂库存管理系统(案例教程实例课程).pdf
Python项目开发实战:视频监控系统(案例教程实例课程).pdf
本征柔性有机电子器件的研究进展-史文康
ROS机器人开发深度学习与神经网络 随着机器学习和深度学习技术的发展,机器人开发领域也在不断发展。ROS(Robot Operating System)是一个开源的机器人操作系统,它提供了一组工具和库,以便开发者可以快速构建和部署机器人系统。深度学习和神经网络技术可以帮助机器人更好地理解和处理环境信息,从而提高机器人的性能和可靠性。本文将介绍如何使用ROS进行机器人开发,并结合深度学习和神经网络技术来提高机器人的性能
创建一个完整的HTML+JS+CSS项目源代码并详细解释每一部分的内容确实是一个挑战,尤其是在限制为5000字的篇幅内。不过,我可以为你提供一个简单的项目示例,并尽量详细地解释每一部分。这个项目将是一个简单的待办事项列表应用,它允许用户添加、删除和标记待办事项为完成或未完成。 项目结构 /todo-app /css - styles.css /js - app.js - index.html HTML (index.html) html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Todo App</title> <link rel="stylesheet" href="css/styles.css"> </head> <body>
使用SQLSEVER完成SQL高级查询的应用
Fundamentals of Data Engineering-O'ReillyMedia.pdf
A2试卷(B)卷答案(16开)
电工电子A2 第十章