Java中 死锁是同步造成的还是异步造成的?
展开全部
死锁是这要发生的。
A,B,C 三个线程都拿着一个资源同时请求另一个由其它人占用的资源,多个参与者的情况也是类似的,反正就是像我们平时说的一手交钱,一手交货,但双方都不放手的过程。
因此只有至少2个参与方同时进行时才会死锁,而同步是一个先做,另一个再接着做,那就不会死锁,因为 A 没完成时,B 还没开始运行,所以 B 不可能抢了 A 需要的资源。
A,B,C 三个线程都拿着一个资源同时请求另一个由其它人占用的资源,多个参与者的情况也是类似的,反正就是像我们平时说的一手交钱,一手交货,但双方都不放手的过程。
因此只有至少2个参与方同时进行时才会死锁,而同步是一个先做,另一个再接着做,那就不会死锁,因为 A 没完成时,B 还没开始运行,所以 B 不可能抢了 A 需要的资源。
更多追问追答
追问
这里有个同步例子但是您看它是死锁吗?
例:
有A,B线程,同步资源C,D ,A线程锁定一个C资源并试图访问D资源,B线程锁定一个D资源并试图访问C资源,两个相互等待就造成了死锁?这个对吗
追答
正确,因为 A, B 两个都在同时运行,而且各自占用一个对方需要的资源导致双方都不符合继续运行的条件而等待。如果换成 A 运行完了之后 B 才运行的话那就不会发生抢资源的情况。或者两个同时运行,但它们申请资源的顺序是一样的,那也不会出问题,因为 A 先抢了 C,B也想去抢 C 就不可能了,所以 C 没抢到手它就阻塞了,所以B这时不可能去抢 D 了。A 在抢到了 C 之后,D 其实是没人跟它抢的。
展开全部
概念上有混淆,同步的反面是非同步,异步的反面是阻塞。
同步可以让线程一个一个进行资源访问,未同步竞争资源,可能会死锁
同步可以让线程一个一个进行资源访问,未同步竞争资源,可能会死锁
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当然是异步了。。。同步情况下都是安全的。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当然是同步了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
异步造成的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询