当前位置: 首页 > news >正文

啊里网站制作自己如何制作一个网页

啊里网站制作,自己如何制作一个网页,wordpress主题注册页美化,wordpress数字主题目录 1. 引言 2. 死锁的产生条件 2.1 互斥条件 2.2 请求与保持条件 2.3 不剥夺条件 2.4 环路等待条件 3. 示例#xff1a;Java中的死锁 4. 如何避免死锁 4.1 加锁顺序 4.2 使用tryLock() 4.3 使用Lock和Condition 5. 结论 1. 引言 在多线程编程中#xff0c;死锁…目录 1. 引言 2. 死锁的产生条件 2.1 互斥条件 2.2 请求与保持条件 2.3 不剥夺条件 2.4 环路等待条件 3. 示例Java中的死锁 4. 如何避免死锁 4.1 加锁顺序 4.2 使用tryLock() 4.3 使用Lock和Condition 5. 结论 1. 引言 在多线程编程中死锁是一种常见但危险的问题。当两个或多个线程互相等待对方释放资源时可能发生死锁导致程序陷入无法继续执行的状态。本篇博客将深入讨论在Java中产生死锁的条件并介绍一些常见的死锁避免策略。 2. 死锁的产生条件 死锁通常需要满足四个条件称为死锁的必要条件 2.1 互斥条件 至少有一个资源是不可共享的只能由一个线程占用。如果一个线程已经占用了该资源其他线程必须等待。 2.2 请求与保持条件 一个线程持有至少一个资源并请求获取其他线程持有的资源。同时线程不会释放自己已经持有的资源。 2.3 不剥夺条件 线程已经获得的资源在未使用完之前不能被其他线程强行剥夺只能由持有该资源的线程自行释放。 2.4 环路等待条件 存在一个等待线程序列其中每个线程都在等待前一个线程持有的资源。形成一个等待资源的循环链。 3. 示例Java中的死锁 让我们通过一个简单的Java代码示例来演示死锁的产生 public class DeadlockExample {private final Object resource1 new Object();private final Object resource2 new Object();public void method1() {synchronized (resource1) {System.out.println(Thread 1: Holding resource 1);try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}synchronized (resource2) {System.out.println(Thread 1: Holding resource 1 and resource 2);}}}public void method2() {synchronized (resource2) {System.out.println(Thread 2: Holding resource 2);try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}synchronized (resource1) {System.out.println(Thread 2: Holding resource 2 and resource 1);}}}public static void main(String[] args) {DeadlockExample deadlockExample new DeadlockExample();// 创建两个线程模拟资源竞争new Thread(deadlockExample::method1).start();new Thread(deadlockExample::method2).start();} }在上述代码中两个线程分别尝试获取resource1和resource2并在持有一个资源的同时请求另一个资源容易导致死锁。 4. 如何避免死锁 为了避免死锁我们可以采用以下策略 4.1 加锁顺序 确保所有线程按照相同的顺序获得锁。这可以减少死锁的可能性。 // 修改method1和method2中的锁的获取顺序 public void method1() {synchronized (resource1) {System.out.println(Thread 1: Holding resource 1);try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}synchronized (resource2) {System.out.println(Thread 1: Holding resource 1 and resource 2);}} }public void method2() {synchronized (resource1) {System.out.println(Thread 2: Holding resource 1);try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}synchronized (resource2) {System.out.println(Thread 2: Holding resource 1 and resource 2);}} }4.2 使用tryLock() 使用tryLock()方法它允许线程尝试获取锁而不阻塞。如果获取锁失败线程可以选择等待一段时间再次尝试或执行其他操作。 public void method1() {if (Thread.holdsLock(resource1)) {System.out.println(Thread 1: Holding resource 1);try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}if (Thread.holdsLock(resource2)) {System.out.println(Thread 1: Holding resource 1 and resource 2);} else {if (Thread.holdsLock(resource2)) {if (Thread.holdsLock(resource1)) {System.out.println(Thread 1: Holding resource 2 and resource 1);}}}} }public void method2() {if (Thread.holdsLock(resource2)) {System.out.println(Thread 2: Holding resource 2);try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}if (Thread.holdsLock(resource1)) {System.out.println(Thread 2: Holding resource 2 and resource 1);} else {if (Thread.holdsLock(resource1)) {if (Thread.holdsLock(resource2)) {System.out.println(Thread 2: Holding resource 1 and resource 2);}}}} }4.3 使用Lock和Condition 使用java.util.concurrent.locks.Lock和java.util.concurrent.locks.Condition可以更灵活地控制锁的获取和释放。 import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock;public class DeadlockExampleWithLock {private final Lock lock1 new ReentrantLock();private final Lock lock2 new ReentrantLock();public void method1() {lock1.lock();System.out.println(Thread 1: Holding lock 1);try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}lock2.lock();System.out.println(Thread 1: Holding lock 1 and lock 2);lock2.unlock();lock1.unlock();}public void method2() {lock2.lock();System.out.println(Thread 2: Holding lock 2);try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}lock1.lock();System.out.println(Thread 2: Holding lock 2 and lock 1);lock1.unlock();lock2.unlock();}public static void main(String[] args) {DeadlockExampleWithLock deadlockExample new DeadlockExampleWithLock();// 创建两个线程模拟资源竞争new Thread(deadlockExample::method1).start();new Thread(deadlockExample::method2).start();} }以上就是一个使用Lock和Condition的例子这种方式更加灵活允许程序员更精细地控制锁的获取和释放。 5. 结论 死锁是多线程编程中一个常见但严重的问题。理解死锁产生的条件以及采取适当的避免策略对于确保程序的稳定性和可靠性至关重要。在Java中通过合理设计锁的获取顺序、使用tryLock()以及采用Lock和Condition等手段我们可以有效地预防死锁的发生。选择适当的策略取决于具体的应用场景和需求程序员需要根据实际情况权衡各种因素来确保多线程程序的稳定性。
http://www.pierceye.com/news/566963/

相关文章:

  • 本地营销型网站建设学校网站制作方案
  • 百度安装app下载免费王通seo赚钱培训
  • 郑州免费网站制作wordpress注册404
  • 晋城有做网站的吗可以做100张照片的软件
  • 比较好的网站建设品牌设计南宁建网站
  • 萧山网站建设那家好wordpress文章标题字体
  • 上海网站营销seo电话ftp网站 免费
  • 手机网站Comapp制作公司哪个好
  • 北京设计公司网站互联网行业都有哪些工作岗位呢
  • lnmp wordpress建设多网站个人网站设计毕业设计论文
  • 如何申请建设网站网站运营与管理的心得体会
  • WordPress如何建小语种网站网站用橙色
  • 北京专业网站优化c2c平台名称
  • 网站建设成本多少四平网站建设公司
  • 专做婚宴用酒是网站玄武模板网站制作报价
  • 建设大型网站设计公司微信公众号菜单跳转网页怎么制作
  • 昆明建设网站网页游戏4399
  • 韶关网站开发搜索引擎调价工具哪个好
  • 镇江做网站的公司上海排名前十的装修公司
  • 如何优化网站关键字网站登录 退出怎么做
  • 网站留言板怎么做湖北网站建设企业
  • 网站建设 教案装饰工程公司经营范围包括哪些?
  • 如何制作动漫网站模板下载地址wamp安装wordpress
  • 做一张简单的app网站多钱.net网站开发后编译
  • 网站上的菠菜游戏哪里可以做做移动网站优化软件
  • 延吉最好的网站建设公司单位建设网站需要的材料
  • 做可视化的网站宿迁 网站制作
  • 深圳如何搭建制作网站济南网站排名推广
  • 六感程序网站建设网站建设材料
  • 大气个人网站源码一般做门户网站多少钱