不定项选择题
下列关于Java多线程并发控制机制的叙述中,错误的是______。
A.Java中对共享数据操作的并发控制是采用加锁技术
B.线程之间的交互,提倡采用suspend()/resume()方法
C.共享数据的访问权限都必须定义为private
D.Java中没有提供检测与避免死锁的专门机制,但应用程序员可以采用某些策略防止死锁的发生
【正确答案】
B
【答案解析】(1)Java中对共享数据操作的并发控制是采用传统的封锁技术。一个程序中单独的、并发的线程对同一个对象进行访问的代码段,称为临界区。在Java语言中,临界区可以是一个语句块或是一个方法,并且用synchronized关键字标识。Java平台将每个由synchronized(Object)语句指定的对象设置一个锁,称为对象锁。
(2)共享数据的所有访问都必须作为临界区,使用synchronized进行加锁控制。用synchronized保护的数据也必须是私有的,使线程不能直接访问这些数据,必须通过对象的方法。
(3)Java中没有检测与避免死锁的专门机制,因此完全由程序进行控制,防止死锁的发生。
(4)有时,某个线程进入synchronized块后,共享数据的状态并不一定满足线程的需要,它要等待其他线程将共享数据改变为它需要的状态后才能继续执行。但由于此时它占有了该对象的锁,其他线程无法对共享数据进行操作,为此Java引入wait()和.notify(),这两个方法是java.lang.object类的方法,是实现线程通信的两种方法。