一般情况下同步使用的锁都是this,函数需要被对象调用,那么函数都有一个所属对象引用,就是this。
如果都把this放在同步锁的位置,在第一个同步中this指Input,而在第二个同步中this指Output,这样就不满足同步的前提之一:
使用同一个锁。故锁就不能使用this了
为了保证锁的唯一性,你可以使用Res.class,Input.class,Output.class,InputOutputDemo.class 这四个任意一个作为锁,因为它们是唯一的
考虑到该程序中r对象也是唯一的,简便起见就使用r作为锁放在synchronized()里面,也就是说在这里可以作为锁的不止一个,而r是最简单的一个
这样解释希望你明白 |