Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 同步(this)和同步(Thread.currentThread()之间的差异_Java_Multithreading_Synchronization_Synchronized - Fatal编程技术网

Java 同步(this)和同步(Thread.currentThread()之间的差异

Java 同步(this)和同步(Thread.currentThread()之间的差异,java,multithreading,synchronization,synchronized,Java,Multithreading,Synchronization,Synchronized,这不是家庭作业,这是一些概念性的问题 synchronized(this)和synchronized(Thread.currentThread())之间有什么区别 在线程实例上获得锁有什么用处或好处? (除了调用方法,如wait(),notify()或notifyAll()) 另外,是否存在可以使用同步(Thread.currentThread())的情况?(除了调用方法,如wait(),notify()或notifyAll()) 您选择在其上同步的对象仅在与哪些代码段希望使用锁来保护特定操作相

这不是家庭作业,这是一些概念性的问题

  • synchronized(this)
    synchronized(Thread.currentThread())
    之间有什么区别

  • 线程
    实例上获得锁有什么用处或好处? (除了调用方法,如
    wait()
    notify()
    notifyAll()

  • 另外,是否存在可以使用
    同步(Thread.currentThread())
    的情况?(除了调用方法,如
    wait()
    notify()
    notifyAll()


  • 您选择在其上同步的对象仅在与哪些代码段希望使用锁来保护特定操作相关的情况下才有意义。因此,主要的功能考虑是确保这些代码片段可以引用对象

    从功能上讲,无论是在
    Thread.currentThread()
    还是
    new Object()
    上同步,只要使用该锁的代码段可以访问该对象(请记住
    Thread.currentThread())
    在不同线程上运行时将返回不同的对象,这使得使用它进行锁定非常困难)


    但是,您应该小心选择要同步的对象,以减少潜在的bug。最好的方案是,只有需要为特定操作锁定对象的代码才能访问锁定对象(因此其他代码不会为可能会干扰的锁定方案共享锁定对象)。

    写“这不是家庭作业”并不能证明它不是家庭作业:)顺便问一句,谁问你这是家庭作业Dstill看起来像一个家庭作业:)几乎是同一个问题-@LaurentiuL。据我所知,synchronized(this)将锁定调用方法的对象,而synchronized(Thread.currentThread())将锁定进入synchronized块时正在执行的Thread对象。但我不知道它们的实际用途有什么不同