【发布时间】:2013-11-09 17:35:50
【问题描述】:
这是给我的 NXT 积木的。
假设我有两个不同的类,A 类和B 类,每个类都有自己的线程在运行。
但是,两个类共享一个名为MotorA 的静态变量实例。这个MotorA 变量是一个物理电机,它的运动可以由两个类控制。 A 类和B 类的线程都可以控制MotorA 的运动,但我只希望它们中的一个同时控制MotorA。
例如,如果 A 类试图向前旋转 MotorA 而 B 类试图向后旋转 MotorA,我只希望 A 类向前旋转 MotorA 并阻止 B 类效果。
问题:我可以使用 SAME 锁来同步来自不同类的线程中的方法吗?
【问题讨论】:
-
是的,你可以;每个资源都应该被一个锁保护。 (尽管拥有一个封装对电机及其锁的访问的类可能会更好。)
-
由于电机变量在两个线程之间共享,
synchronize在该电机变量上,这是完全合法的。 -
虽然
MotorA是静态的,所以使方法同步没有帮助(除非方法也是静态的),您需要锁定方法内的变量。
标签: java multithreading synchronization locking