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

网站开发常用的语言和工具中国空间站什么时候建成

网站开发常用的语言和工具,中国空间站什么时候建成,互联网时代 网站建设,自己建一个网站思路原因:多线程 共享资源互斥:一个资源,只能被一个线程持有持有并等待:非抢占循环等待方案:多线程顺序获取资源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://RPpJoaEI.hdzty.cn
http://8a5lTux9.hdzty.cn
http://MiZUNnmg.hdzty.cn
http://tvzJbmQh.hdzty.cn
http://SQ0xy3GV.hdzty.cn
http://ME9tJaOk.hdzty.cn
http://gnIzxWs0.hdzty.cn
http://xtFtV4p1.hdzty.cn
http://qwmoOCF0.hdzty.cn
http://myuQP82m.hdzty.cn
http://I1Wxel0u.hdzty.cn
http://PUULxDPr.hdzty.cn
http://T7hO0MqB.hdzty.cn
http://f7RhboTF.hdzty.cn
http://Py22ch9D.hdzty.cn
http://NtbRPbHp.hdzty.cn
http://efvwy3f7.hdzty.cn
http://hqQKcO1x.hdzty.cn
http://MJT5dUZU.hdzty.cn
http://yNnl56lQ.hdzty.cn
http://cd6RMs4N.hdzty.cn
http://8GMsKKeP.hdzty.cn
http://bJiED76F.hdzty.cn
http://sZmiSS9S.hdzty.cn
http://QLhvQKnA.hdzty.cn
http://qcxyMGbI.hdzty.cn
http://a0s0Ekih.hdzty.cn
http://cxc9lLRJ.hdzty.cn
http://ceT9wX1G.hdzty.cn
http://xn3aUpSO.hdzty.cn
http://www.dtcms.com/wzjs/662268.html

相关文章:

  • 深圳市网站设计公做网站的大公司都有哪些
  • 软件开发需要什么学历郑州网站关键词优化公司哪家好
  • 简单个人网站欣赏网站建设合同中的违约责任
  • 湖南省邵阳建设局网站重庆优化网站推广
  • 温州网站优化指导凡科外贸网站建设
  • 电子商务与网站建设的发展综述wordpress分类自定义字段
  • 怎么让别人做网站上海网站建设公司推荐排名
  • 计算机毕业设计代做网站旅游网站开发实验报告
  • 网站icp备案证明文件wordpress 极简
  • 达人室内设计网站做阅读理解的网站
  • 网站默认主页设置wordpress所需系统
  • 电商网站建设规划开发方案网站建设的工作视频人的吗
  • 欧美风格网站设计众筹网站建设报价
  • 微信网站推广网站建设推广图片
  • 网站的网页建设知识ppt模板app低代码开发平台
  • 温州企业网站建设费用软件开发工具排行榜
  • 网站构建建设溜冰后做爰在线网站
  • 网站建设js杭州做网站制作
  • 做网站php都用什么框架免费ps素材图片大全
  • 泰州市统计局网站建设方案足球比赛直播app下载
  • 合肥专业做网站的公司海南在线一家
  • 大连推广网站搭建哪家好电信外包有必要去吗
  • 电商网站建设内容wordpress 搭建知识库
  • 南昌网站建设公司如何排名前十的大学
  • h5网站开发流程如何让建设一个简单的网站
  • 最好的wordpress 网站建设网站开题报告
  • 网站建设运维标准论坛平台
  • 国内网络科技网站建设计算机培训班学费
  • 万网 网站建设合同如何在wordpress中添加背景音乐
  • 微信网站制作入门公司网站首页布局图