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

国外自建站怎么样公司网站主机流量30g每月够用吗

国外自建站怎么样,公司网站主机流量30g每月够用吗,合肥缶间网络科技有限公司,珠海移动互联网开发死锁的产生与避免 一、死锁的产生原因二、典型死锁场景示例三、死锁的检测与诊断1. 使用工具检测死锁2. 日志分析 四、死锁的避免策略1. 破坏“请求与保持”条件2. 破坏“不可剥夺”条件3. 破坏“循环等待”条件4. 使用超时机制5. 减少锁的粒度 五、最佳实践总结六、总结 一、死…

死锁的产生与避免

    • 一、死锁的产生原因
    • 二、典型死锁场景示例
    • 三、死锁的检测与诊断
      • 1. 使用工具检测死锁
      • 2. 日志分析
    • 四、死锁的避免策略
      • 1. 破坏“请求与保持”条件
      • 2. 破坏“不可剥夺”条件
      • 3. 破坏“循环等待”条件
      • 4. 使用超时机制
      • 5. 减少锁的粒度
    • 五、最佳实践总结
    • 六、总结

一、死锁的产生原因

死锁是多个线程(或进程)因竞争资源而陷入无限等待的状态,需同时满足以下 四个必要条件

  1. 互斥条件(Mutual Exclusion)

    • 资源一次只能被一个线程独占使用(如锁、文件句柄)。
  2. 请求与保持(Hold and Wait)

    • 线程在持有至少一个资源的同时,请求其他线程占有的资源。
  3. 不可剥夺(No Preemption)

    • 资源只能由持有者主动释放,不能被强制抢占。
  4. 循环等待(Circular Wait)

    • 多个线程形成环形等待链,每个线程都在等待下一个线程释放资源。

二、典型死锁场景示例

Java 代码示例

public class DeadlockDemo {private static final Object lockA = new Object();private static final Object lockB = new Object();public static void main(String[] args) {new Thread(() -> {synchronized (lockA) {System.out.println("Thread1 holds lockA");try { Thread.sleep(100); } catch (InterruptedException e) {}synchronized (lockB) {  // 等待Thread2释放lockBSystem.out.println("Thread1 holds lockB");}}}).start();new Thread(() -> {synchronized (lockB) {System.out.println("Thread2 holds lockB");try { Thread.sleep(100); } catch (InterruptedException e) {}synchronized (lockA) {  // 等待Thread1释放lockASystem.out.println("Thread2 holds lockA");}}}).start();}
}

结果
两个线程互相等待对方释放锁,程序无限卡死。


三、死锁的检测与诊断

1. 使用工具检测死锁

  • jstack(Java自带工具):
    jstack <pid>  # 输出线程快照,显示死锁的线程及持有/等待的锁
    
  • VisualVMJConsole
    图形化界面查看线程状态,直接标记死锁。

2. 日志分析

若日志中线程长时间处于 BLOCKED 状态且无进展,可能发生死锁。


四、死锁的避免策略

1. 破坏“请求与保持”条件

  • 一次性申请所有资源
    线程在开始执行前申请全部所需资源,否则不执行。
    缺点:资源利用率低,可能导致饥饿。

2. 破坏“不可剥夺”条件

  • 允许抢占资源
    若线程请求资源失败,强制释放已持有的资源(需支持回滚操作)。
    缺点:实现复杂,适用于特定场景(如数据库事务)。

3. 破坏“循环等待”条件

  • 资源有序分配法
    为所有资源类型定义全局顺序,线程按顺序申请资源。
    示例
    规定必须先申请 lockA 再申请 lockB,避免交叉申请。

    // 修改后代码:两个线程均按 lockA → lockB 顺序申请
    new Thread(() -> {synchronized (lockA) {synchronized (lockB) { /* 逻辑 */ }}
    }).start();new Thread(() -> {synchronized (lockA) {synchronized (lockB) { /* 逻辑 */ }}
    }).start();
    

4. 使用超时机制

  • 尝试获取锁时设置超时
    若在指定时间内未获得锁,放弃并释放已持有的资源,避免无限等待。
    Java实现(使用 ReentrantLock):
    Lock lockA = new ReentrantLock();
    Lock lockB = new ReentrantLock();if (lockA.tryLock(1, TimeUnit.SECONDS)) {try {if (lockB.tryLock(1, TimeUnit.SECONDS)) {try { /* 逻辑 */ } finally { lockB.unlock(); }}} finally { lockA.unlock(); }
    }
    

5. 减少锁的粒度

  • 缩小同步范围
    仅对必要代码加锁,减少锁的持有时间。
  • 使用线程安全的数据结构
    ConcurrentHashMap 替代 synchronized + HashMap

五、最佳实践总结

策略适用场景优点缺点
资源有序分配多锁交叉申请场景简单有效,预防循环等待需全局统一顺序,可能限制灵活性
超时机制高并发、允许重试的场景避免无限等待,提升系统健壮性需处理超时重试逻辑
无锁编程(CAS、原子类)低竞争、简单操作场景高性能,无死锁风险复杂逻辑实现困难
事务回滚数据库、支持回滚的操作保证数据一致性实现成本高

六、总结

死锁的避免需结合业务场景选择合适的策略:

  • 关键系统(如金融交易):优先使用资源有序分配和超时机制。
  • 高并发系统:减少锁粒度,采用无锁数据结构。
  • 复杂事务:结合事务管理和回滚机制。

通过代码规范、工具检测和设计优化,可显著降低死锁发生概率。


文章转载自:

http://cUYLa77e.prmyx.cn
http://3r9aViVR.prmyx.cn
http://ZOUqgjmK.prmyx.cn
http://3Xvy5Yx3.prmyx.cn
http://68asgecT.prmyx.cn
http://257FX8gA.prmyx.cn
http://i6lFdRcY.prmyx.cn
http://3jqGI5f8.prmyx.cn
http://shNvMH3k.prmyx.cn
http://PgfEYARm.prmyx.cn
http://vtX5xZ8w.prmyx.cn
http://20zRills.prmyx.cn
http://7SLfCmm0.prmyx.cn
http://2mKJgUSK.prmyx.cn
http://eglcXO8P.prmyx.cn
http://uar1pakn.prmyx.cn
http://ajy1GYfo.prmyx.cn
http://UHborbJE.prmyx.cn
http://OjZnedbV.prmyx.cn
http://DiCz9Gc9.prmyx.cn
http://mISBEUU0.prmyx.cn
http://55SSicxI.prmyx.cn
http://PMIWvAct.prmyx.cn
http://LDMA0edJ.prmyx.cn
http://r9YBQMH5.prmyx.cn
http://nNjfHX4v.prmyx.cn
http://4yKXZuu8.prmyx.cn
http://WmA2BwOU.prmyx.cn
http://6bbduZ23.prmyx.cn
http://GnOcxumI.prmyx.cn
http://www.dtcms.com/wzjs/730686.html

相关文章:

  • 海淀营销型网站建设浙江建设继续教育网站
  • 安徽合肥制作网站公司吗阳江市网络问政平台登录
  • 西宁做网站公司哪家好做个网站需要多钱
  • 室内设计效果图素材网站抚顺 网站建设
  • 自己搭建网站需要什么wordpress返回上一个网页
  • pc网站怎么做网站开发需求方案模板
  • 如何搭建一个购物网站seo站内优化站外优化
  • 快站淘客wordpress维护
  • 服装网站开发项目计划书建立公司官网
  • 苏州实力做网站公司有哪些音乐网站怎么建设
  • 网站建设 中企动力厨具网站页头设计
  • 网站建设建议给我播放电影在线观看
  • 河南省城乡与住房建设厅网站宣传片拍摄制作多少钱
  • 兰州网站设计公司哪家最好wordpress设置显示摘要
  • 重庆门户网站华龙网网站开发 评价
  • 网站开发工程师和软件工程六枝特区建设局网站
  • 模拟网站建设软件在别人网站做的友链_为何百度检测带后缀cnindex.asp
  • 检察内网门户网站建设合肥做拼拼团网站的公司
  • 哪里有网站推广优化电脑制作网站教程
  • 做游戏的网站有哪些手机百度浏览器
  • 九江建网站公司有哪些交换链接或称互惠链接
  • 漯河小学网站建设深圳做网站哪里最好
  • 房地产景区网站建设方案外贸网站平台下载
  • 网站模板 数据库天河网站建设设计
  • 网站的logo在百度怎么显示不出来wordpress永久链接无效
  • 网站建设那里福州有什么做网站的公司
  • 如何申请我的网站网站漂浮怎么做
  • 长沙旅游seo顾问能赚钱吗
  • 用linux做网站外贸流程思维导图
  • 河北网站备案查询系统微信分享网站短链接怎么做