Java线程之死锁案例

死锁发生的条件

1、互斥条件:任意时刻该资源只由一个线程占用
2、请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放
3、线程已获得的资源在末使用完之前不能被其他线程强行剥夺,只有自己使用完毕后才释放资源。
4、循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系

避免死锁只需破坏以上4个条件之一即可。
如果资源可以共享就不会发生死锁。但是有些资源根本不能同时访问,比如打印机等临界资源,所以破坏互斥条件不太可行。

死锁代码

public class DeadLock {

    public static void main(String[] args) {
        Object a = new Object();
        Object b = new Object();

        new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (a) {
                    System.out.println("等待b");
                    try {
                    	//这里sleep10s是为了让线程BB拿到资源b
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (b) {

                    }
                }
            }
        }, "AA").start();


        new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (b) {
                    System.out.println("等待a");
                    synchronized (a) {

                    }
                }
            }
        }, "BB").start();

    }
}

运行上面程序,然后使用jps命令,输出如下:
在这里插入图片描述
然后使用jstack命令查看堆栈信息,jstack 17332,输出如下
在这里插入图片描述
从控制台的输出可以看到的确发生了死锁。

参考

JUC高并发编程

### 解决 VSCode 中 JSON 文件只读问题的方法 当遇到在 VSCode 编辑器中无法编辑 JSON 文件的情况时,这通常是因为文件被标记为只读。为了取消这种状态并允许正常编辑,可以通过调整设置来解决问题。 对于因权限或环境配置引起的只读情况,建议按照如下方式处理: 通过修改VSCode的特定设置选项能够有效解决该类问题,在VSCode内依次执行以下命令可达到目的:点击左下角齿轮图标进入设置界面;利用搜索栏查找`Shebang`相关配置项;找到名为`Run Code Configuration: Respect Shebang`的选择框,并确保其处于启用状态[^4]。不过需要注意的是,上述操作主要是针对由插件引发的只读状况,而并非操作系统层面设定的真正意义上的只读属性。 另外一种常见的情形是由于文件本身或者所在磁盘分区设置了只读标志位所造成的。此时应当检查目标JSON文档以及它所在的存储设备的状态,确认是否有外部因素干扰写入权限。如果是这种情况,则需前往资源管理器或者其他相应工具里解除对应的限制条件后再尝试编辑。 最后值得注意的一点是在某些特殊环境下(比如使用PlatformIO开发框架配合SDCC编译器),可能还会碰到因为IDE未能正确解析自定义语法而导致误报只读警告的现象。对此可通过适当调整预处理器宏定义的方式绕过此类伪异常,例如向项目源码引入`__SDCC_SYNTAX_FIX`参数以便让VSCode更好地理解非标准C语言结构[^2]。 尽管以上措施有助于缓解大多数场景下的只读难题,但在实际应用过程中仍应具体情况具体分析,必要时查阅官方文档获取更详尽的帮助信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值