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

wordpress+站群软件徐州市政建设集团有限责任公司

wordpress+站群软件,徐州市政建设集团有限责任公司,微信引流推广网站建设,制作高端网页思路原因:多线程 共享资源互斥:一个资源,只能被一个线程持有持有并等待:非抢占循环等待方案:多线程顺序获取资源tryLock 设置获取锁超时时间使用并发集合或类:concurrenthashmap AutonomicLong减小持有锁多…

思路

原因:

多线程 + 共享资源

互斥:一个资源,只能被一个线程持有

持有并等待:

非抢占

循环等待

方案:

多线程顺序获取资源

+

tryLock 设置获取锁超时时间

使用并发集合或类:concurrenthashmap AutonomicLong

减小持有锁多粒度

ReentrantLock
支持可中断锁、公平锁、尝试锁等

多线程死锁(Deadlock)详解

死锁是多线程编程中最经典的问题之一,指 两个或多个线程互相持有对方需要的资源,导致所有线程无限等待。以下是死锁的核心概念、产生条件、排查方法和解决方案。


1. 死锁的四个必要条件

死锁发生必须同时满足以下四个条件(缺一不可):

  1. 互斥条件(Mutual Exclusion)
    资源一次只能被一个线程占用(如锁、文件句柄等)。

  2. 占有并等待(Hold and Wait)
    线程持有至少一个资源,同时等待获取其他被占用的资源。

  3. 非抢占条件(No Preemption)
    已分配给线程的资源不能被其他线程强制夺取,必须由线程主动释放。

  4. 循环等待(Circular Wait)
    存在一个线程的循环等待链,每个线程都在等待下一个线程占用的资源。


2. 死锁代码示例(Java)

java

public class DeadlockExample {private static final Object lock1 = new Object();private static final Object lock2 = new Object();public static void main(String[] args) {Thread thread1 = new Thread(() -> {synchronized (lock1) {System.out.println("Thread1 holds lock1");try { Thread.sleep(100); } catch (InterruptedException e) {}synchronized (lock2) {System.out.println("Thread1 holds lock2");}}});Thread thread2 = new Thread(() -> {synchronized (lock2) {System.out.println("Thread2 holds lock2");synchronized (lock1) {System.out.println("Thread2 holds lock1");}}});thread1.start();thread2.start();}
}

输出结果

text

Thread1 holds lock1
Thread2 holds lock2
(程序卡死,无法继续)
  • 原因

    • Thread1 持有 lock1,等待 lock2

    • Thread2 持有 lock2,等待 lock1

    • 形成 循环等待,导致死锁。


3. 如何检测死锁?

(1) 命令行工具(Linux/Java)
  • jstack(Java 线程分析工具):

    bash

    jstack <PID>  # 查看线程堆栈,搜索 "deadlock"
  • jconsole 或 VisualVM
    图形化工具中可直接检测到死锁线程。

(2) 代码中主动检测

java

ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
long[] threadIds = threadMXBean.findDeadlockedThreads();
if (threadIds != null) {System.out.println("Detected deadlock!");
}

4. 解决死锁的常见方法

(1) 破坏死锁的必要条件
  • 避免互斥
    使用无锁数据结构(如 ConcurrentHashMap)。

  • 避免占有并等待
    一次性申请所有资源(如通过全局锁)。

  • 允许抢占
    使用 tryLock() 超时机制(见下文)。

  • 避免循环等待
    按固定顺序获取锁(如总是先 lock1 后 lock2)。

(2) 使用超时机制

java

if (lock1.tryLock(100, TimeUnit.MILLISECONDS)) {try {if (lock2.tryLock(100, TimeUnit.MILLISECONDS)) {try {// 执行业务逻辑} finally {lock2.unlock();}}} finally {lock1.unlock();}
}
(3) 锁顺序全局化

java

// 总是先获取 hash值小的锁
int hash1 = System.identityHashCode(lock1);
int hash2 = System.identityHashCode(lock2);if (hash1 < hash2) {synchronized (lock1) {synchronized (lock2) { /* ... */ }}
} else {synchronized (lock2) {synchronized (lock1) { /* ... */ }}
}
(4) 使用高级并发工具
  • ReentrantLock
    支持可中断锁、公平锁、尝试锁等。

  • Semaphore
    控制资源访问数量。

  • CyclicBarrier / CountDownLatch
    协调多线程执行顺序。


5. 预防死锁的最佳实践

  1. 尽量减少同步代码块的范围

  2. 避免嵌套锁(如一个同步方法调用另一个同步方法)。

  3. 使用线程池,避免无限制创建线程。

  4. 设计时考虑锁顺序,避免循环等待。

  5. 监控工具预警(如 APM 工具检测线程阻塞)。


总结

关键点说明
死锁条件互斥、占有等待、非抢占、循环等待(四者缺一不可)。
检测工具jstackjconsole、VisualVM。
解决方案破坏必要条件、超时机制、锁顺序全局化、使用高级并发工具。
预防策略减少锁粒度、避免嵌套锁、设计时规划锁顺序。

死锁是并发编程中的难点,但通过合理设计和工具辅助,可以有效避免和解决!


文章转载自:

http://ltEtbi3y.wdzmL.cn
http://jBoONqaL.wdzmL.cn
http://x4pX5KmG.wdzmL.cn
http://H9sqa7a4.wdzmL.cn
http://ZDEEj4QZ.wdzmL.cn
http://OFGxYf6z.wdzmL.cn
http://TdqknjAM.wdzmL.cn
http://UWTxiOh3.wdzmL.cn
http://UZiwp7Lp.wdzmL.cn
http://HFtltagF.wdzmL.cn
http://25hE90TX.wdzmL.cn
http://3oqudzl4.wdzmL.cn
http://hiNThQ6Q.wdzmL.cn
http://IbeTglCC.wdzmL.cn
http://70GlNVfn.wdzmL.cn
http://hVtCRWU5.wdzmL.cn
http://cAI1uURx.wdzmL.cn
http://bK7pr1Hk.wdzmL.cn
http://ImoZXTQN.wdzmL.cn
http://jLc4dlnl.wdzmL.cn
http://TV9BRMaH.wdzmL.cn
http://3hdKHowh.wdzmL.cn
http://fuHZNQSX.wdzmL.cn
http://sDqqvQNp.wdzmL.cn
http://tvPAjaFm.wdzmL.cn
http://NTG49TDP.wdzmL.cn
http://MwANnymS.wdzmL.cn
http://46AVdOOZ.wdzmL.cn
http://YPk1CTcY.wdzmL.cn
http://aT0RDVq7.wdzmL.cn
http://www.dtcms.com/wzjs/715699.html

相关文章:

  • 上海商务网站建设阿里云做网站选什么主机
  • 网站后台开发 必备技能wordpress 回复 楼中楼
  • 网站建设的用户体验中石油技术开发公司网站
  • 网站开发有没有前途时事新闻热点
  • 漳州做网站设计网站做外链推广的常用方法
  • 怎么做网站互换链接企业网站优化怎么提高关键词排名
  • 汉南公司网站建设建设黑彩网站需要什么
  • 六安网站制作费用一般做网站要什么编程
  • qq做兼职给网站给你学做网站多长时间
  • 桂林做手机网站设计外贸仿牌网站被封的后果
  • 哈尔滨如何快速建站wordpress优惠码插件
  • 怎么做动漫照片下载网站应用商城下载
  • 高端企业网站建设制作广东莞业工程设计有限公司
  • 企业网站开发前后台模块设计企业策划是什么意思
  • 平面设计培训网站大全家在深圳光明
  • 网站建设效果如何做网站 代码
  • 电商网站项目经验介绍开网站设计公司多少钱
  • 汽车app网站建设wordpress 本地上传服务器
  • 网站里的动画效果图360免费建站搜索引擎收录吗
  • asp.net网站建设ppt网站后台修改图片集顺序
  • 网站备案取消接入企业网站制作设计公司
  • 烟台网站建设外贸wordpress分类编辑器
  • 建设银行网站账户注销私密浏览器官网
  • 广西网站设计服务腾讯企业邮箱官网登录入口网页版
  • 分类网站开发ios6软件下载网站
  • 建设部职称证书查询官方网站怎样设计静态网站页面
  • 最优的手机网站建设云南网站的设计公司
  • 网站建设 技术支持 阿里搜狗seo快速排名公司
  • 临清网站建设网站制作过程中碰到的问题
  • 网站建设步骤详解网站建设软件开发公司