同步注释在 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,其实例都 Controllers将引用或使用其他并发实用程序,例如 withLock 调用共享锁。