在Java多线程环境中,假设一个类包含一个静态变量`count`和两个方法:`synchronized static void increment()`和`synchronized void decrement()`。当两个线程分别调用同一个实例的`decrement()`方法和不同实例的`increment()`方法时,以下描述正确的是:
答案解析
核心考点:synchronized关键字的锁机制区别。
解题思路分析:
1. synchronized修饰静态方法时获取的是类锁,修饰实例方法时获取的是对象实例锁
2. 不同锁之间不存在互斥,因此可能并行执行
3. 数据竞争是否发生取决于是否共享变量及同步机制
选项分析:
A错误:类锁和实例锁是两种不同的锁,不会冲突
B正确:两种锁相互独立,允许并行执行
C错误:若通过类对象调用实例方法可能产生特殊情形,但题目中调用方式明确排除了这种可能
D错误:虽然存在并行访问,但每个方法都有同步块,单独调用时能保证原子性
易错点提醒:容易混淆类锁与实例锁的作用范围,误认为所有synchronized方法都会互斥
正确答案:B