是的你可以.你可以这样做:
class MotorA {
private static MotorA motor = new MotorA();
private static final java.util.concurrent.locks.Lock lock = new java.util.concurrent.locks.ReentrantLock();
private MotorA() { }
public static MotorA getMotorA() {
return motor;
}
public static Lock getLock() {
return lock;
}
/* here go business methods for MotorA */
}
接下来,当您想要在MotorA实例上执行任何操作时,您只需要:
> 1)通过getLock()检索其锁定
> 2)在给定实例上调用Lock.lock()
> 3)通过getMotorA()获取MotorA单身人士
> 4)在MotorA instace上执行任何方法
> 5)调用Lock.unlock()以释放锁定.
在这种情况下,对多个线程的访问将是安全的.
或者您可以简单地在MotorA的实例上进行同步:
class UserOfMotor1 {
public void doOperationInMotor1Thread() {
synchronized(MotorA.getMotorA()) {
MotorA motor = MotorA.getMotorA();
motor.soSth();
}
}
}
但在这种情况下,每当线程使用共享资源时,您还必须使用synchronized()块 – 在您的案例中为MotorA.如果使用这种控制同步的方法,则必须确保在不同线程中的同一对象上进行同步 – 在这种情况下,MotorA是一个Singleton,因此您始终可以获得相同的实例.