当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 日前在网上见到一道Java笔试试题,如题所述。给出的答案如下: 答:不能,一个对象的一个synchronized方法只能由一个线程访问。 本人认为有些所答非所问。故写了两个demo进行测试。发现答案要分三种情况讨论。
当一个线程进入一个对象的一个synchronized方法后,其它线程访问该对象的非同步方法。 代码如下: Java代码
运行结果: 一个线程在访问一个对象的同步方法时,另一个线程可以同时访问这个对象的非同步方法。
当一个线程进入一个对象的一个synchronized方法后,其它线程也访问该同步方法。 运行结果: 一个线程在访问一个对象的同步方法时,另一个线程不能同时访问这个同步方法。(代码略)
当一个线程进入一个对象的一个synchronized方法后,其它线程同时访问该对象的另一个同步方法。 此处仅给出对InvokedObject类做出的修改代码: Java代码
运行结果: 一个线程在访问一个对象的同步方法时,另一个线程不能同时访问这个对象的另一个同步方法。 |
|