Java认证考试实例疑难辨析(2)

本文详细解析了线程死锁的概念及其成因,并解释了线程睡眠的作用及与死锁的区别。通过例题加深对线程死锁的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2.

【知识点】

(1)线程死锁(Thread Deadlock)

线程死锁是指两个或两个以上线程因互相间僵持等待而造成永久性阻塞运行的情形。

线程死锁本质是线程竞争(Thread Contention),这是因为两个或两个以上线程同时访问同一资源造成

(2)线程睡眠(Thread Sleep

线程睡眠是指让当前线程暂停执行一段时间,既不会永久性地阻塞其他线程运行,也不能保证当前线程获得所需资源而退出死锁。

 

【例题】

Which two statements are true? (Choose two.)

A. It is possible for more than two threads to deadlock at once.

B. The JVM implementation guarantees that multiple threads cannot enter into a deadlocked state.

C. Deadlocked threads release once their sleep() method's sleep duration has expired.

D. Deadlocking can occur only when the wait(),notify(), and notifyAll() methods are used incorrectly.

E. It is possible for a single-threaded application to deadlock if synchronized blocks are used incorrectly.

F. If a piece of code is capable of deadlocking, youcannot eliminate the possibility of deadlocking by inserting invocations ofThread.yield().

【Answer】 AF

【例题辨析】

A. 题意:超过两个线程可能立即出现死锁。

符合死锁定义。

B. 题意:Java虚拟机的实现能确保多个线程不会进入死锁状态。

Java语言中解决并发(Concurrent)运行冲突并不是由Java虚拟机负责的,而是由应用程序自行处理,比如同步化(Synchronization)等机制都由程序员在应用设计中使用的,所以,Java虚拟机并不能保证不发生死锁。

C. 题意:只要死锁线程的sleep()方法睡眠时间期满,死锁线程就会获释。

这种观点显然没有正确理解Deadlock与sleep之间的区别,死锁是线程对资源的竞争造成的,线程睡眠期满并不能保证线程获得所需资源。

D. 题意:只有当wait()、notify()、notifyAll()这些方法不正确使用时死锁才发生。

wait()、notify()、notifyAll()这些方法不正确使用时确实可以造成死锁,但死锁发生的根本原因还是资源竞争,因此别的因素也可以造成死锁。

E. 题意:只有当同步块不正确使用时单线程应用才会死锁。

死锁是发生在两个或两个以上线程之间,既然是单线程应用那就谈不上死锁了。

F. 题意:如果一个程序片断会死锁,那么你就不能通过插入Thread.yield()方法调用消除死锁。

Thread.yield()方法功能是告诉线程调度者当前线程愿意让出对处理器(CPU)的占用,线程调度者甚至可以不理睬这个方法。造成死锁的资源不仅是处理器,显然这种方式并不足以解决死锁。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值