同步注释在 Kotlin 中不起作用
Synchronized annotation doens't working in Kotlin
我有一个前台服务,我正在执行这个方法:
Controller().threadTest()
Controller().threadTest()
我的控制器 class 是:
class Controller{
fun threadTest(){
Thread(Runnable{
threadOperation()
}).start()
}
@Synchronized
private fun threadOperation(){
println("Thread start")
Thread.sleep(3000)
println("Thread finish")
}
}
但是@Synchronized 不起作用,因为我的日志是:
Thread start
Thread start
Thread finish
Thread finish
我做错了什么?
@Synchronized
注释仅防止在同一实例的调用中并发执行函数。在您的情况下,您正在创建 Controller()
.
的两个实例
如果您修改调用代码以便它只创建您的 class 的一个实例,您将获得预期的行为(调用执行 one-by-one),例如:
val controller = Controller()
controller.threadTest()
controller.threadTest()
或者,如果您需要在多个 Controller
实例上相互排斥并发调用,则必须将 @Synchronized
移动到另一个 class,其实例都 Controller
s将引用或使用其他并发实用程序,例如 withLock
调用共享锁。
我有一个前台服务,我正在执行这个方法:
Controller().threadTest()
Controller().threadTest()
我的控制器 class 是:
class Controller{
fun threadTest(){
Thread(Runnable{
threadOperation()
}).start()
}
@Synchronized
private fun threadOperation(){
println("Thread start")
Thread.sleep(3000)
println("Thread finish")
}
}
但是@Synchronized 不起作用,因为我的日志是:
Thread start
Thread start
Thread finish
Thread finish
我做错了什么?
@Synchronized
注释仅防止在同一实例的调用中并发执行函数。在您的情况下,您正在创建 Controller()
.
如果您修改调用代码以便它只创建您的 class 的一个实例,您将获得预期的行为(调用执行 one-by-one),例如:
val controller = Controller()
controller.threadTest()
controller.threadTest()
或者,如果您需要在多个 Controller
实例上相互排斥并发调用,则必须将 @Synchronized
移动到另一个 class,其实例都 Controller
s将引用或使用其他并发实用程序,例如 withLock
调用共享锁。