我在Java应用程序中有一个数据传输对象(DTO(,它在应用程序的几个不同线程中被读取和写入。到目前为止,我已经能够使用synchronized(dto.class)
进行同步。现在有一个实例,我需要在调用它的方法之外持有锁,所以我将使用ReentrantLock()
类。
有没有一种线程安全的方法可以在一个实例中为其功能使用可重入锁,同时保持代码其余部分的同步块?或者,使用可重入锁是否意味着必须删除所有相关的同步块?
是否有线程安全的方法可以在一个实例中为其功能使用可重入锁,同时保持代码其余部分的同步块?
synchronized
块保护哪些数据?您希望使用ReentrantLock
保护哪些数据?如果它们是不同的数据,那么使用不同的方法来保护它们应该没有问题。但是,如果您试图在同一个位置保护相同的数据,那么在一个位置使用synchronized
,在另一个地方使用ReentrantLock
是没有任何意义的。锁定ReentrantLock
不会阻止其他线程进入synchronized
块,反之亦然。