草庐IT

synchronized

全部标签

java - 显示 java 同步块(synchronized block)如何工作的示例代码

我正在学习java多线程,我发现很难理解同步块(synchronizedblock)是如何工作的:synchronized(Objecto){//dosomething}请给出一些示例代码,可以显示对象o被阻止。据我了解,在执行同步块(synchronizedblock)时,从另一个线程访问对象o将被阻止? 最佳答案 SynchronizationinJavaisanimportantconceptsinceJavaisamulti-threadedlanguagewheremultiplethreadsruninparallelt

java - 在java中同步一个对象,然后更改同步变量的值

我遇到了这样的代码synchronized(obj){obj=newObject();}感觉有些不对劲,我无法解释,这段代码是OK还是真的有什么问题,请指出。谢谢 最佳答案 这可能不是您想要做的。您正在对不再持有引用的对象进行同步。考虑另一个运行此方法的线程:在对obj的引用被更新为指向新对象之后,它们可能会进入并尝试锁定。那时,它们正在与第一个线程不同的对象上进行同步。这可能不是您所期望的。除非您有充分的理由不这样做,否则您可能希望在最终对象上进行同步(为了可见性)。在这种情况下,您可能希望使用单独的锁定变量。例如:classFo

java - 在java中同步一个对象,然后更改同步变量的值

我遇到了这样的代码synchronized(obj){obj=newObject();}感觉有些不对劲,我无法解释,这段代码是OK还是真的有什么问题,请指出。谢谢 最佳答案 这可能不是您想要做的。您正在对不再持有引用的对象进行同步。考虑另一个运行此方法的线程:在对obj的引用被更新为指向新对象之后,它们可能会进入并尝试锁定。那时,它们正在与第一个线程不同的对象上进行同步。这可能不是您所期望的。除非您有充分的理由不这样做,否则您可能希望在最终对象上进行同步(为了可见性)。在这种情况下,您可能希望使用单独的锁定变量。例如:classFo

java - 同步锁和重入锁的区别?

这个问题在这里已经有了答案:What'sthedifferenceinusingReentrentLockandSynchronized(object)?[duplicate](1个回答)关闭5年前.我在Java中使用过synchronized关键字和可重入锁,但我不明白它们有何不同,或者哪种适合特定情况。我如何决定什么时候应该使用synchronized以及什么时候应该使用重入锁? 最佳答案 一个ReentrantLock是:AreentrantmutualexclusionLockwiththesamebasicbehavior

java - 同步锁和重入锁的区别?

这个问题在这里已经有了答案:What'sthedifferenceinusingReentrentLockandSynchronized(object)?[duplicate](1个回答)关闭5年前.我在Java中使用过synchronized关键字和可重入锁,但我不明白它们有何不同,或者哪种适合特定情况。我如何决定什么时候应该使用synchronized以及什么时候应该使用重入锁? 最佳答案 一个ReentrantLock是:AreentrantmutualexclusionLockwiththesamebasicbehavior

java - "synchronized"在 Java 中是什么意思?

这个问题在这里已经有了答案:Whatdoes'synchronized'mean?(17个回答)关闭4年前。我一直在努力学习设计模式。Thissite使用synchronized关键字,但我不明白它的作用。在网上搜了一下,发现跟多线程和内存有点关系,但是我是机械工程师,不明白是什么意思。谁能帮我理解线程和synchronized关键字? 最佳答案 C++中没有synchronized关键字。不过,Java中有一个,其中方法itmeansthefollowingtwothings:Itisnotpossiblefortwoinvoca

java - "synchronized"在 Java 中是什么意思?

这个问题在这里已经有了答案:Whatdoes'synchronized'mean?(17个回答)关闭4年前。我一直在努力学习设计模式。Thissite使用synchronized关键字,但我不明白它的作用。在网上搜了一下,发现跟多线程和内存有点关系,但是我是机械工程师,不明白是什么意思。谁能帮我理解线程和synchronized关键字? 最佳答案 C++中没有synchronized关键字。不过,Java中有一个,其中方法itmeansthefollowingtwothings:Itisnotpossiblefortwoinvoca

Java中synchronized的优化

本文介绍为了实现高效并发,虚拟机对synchronized做的一系列的锁优化措施高效并发是从JDK5升级到JDK6后一项重要的改进项,HotSpot虚拟机开发团队在JDK6这个版本上花费了大量的资源去实现各种锁优化技术,如适应性自旋(AdaptiveSpinning)、锁消除(LockElimination)、锁膨胀(LockCoarsening)、轻量级锁(LightweightLocking)、偏向锁(BiasedLocking)等,这些技术都是为了在线程之间更高效地共享数据及解决竞争问题,从而提高程序的执行效率。自旋锁&自适应自旋在许多应用上,共享数据的锁定状态只会持续很短的一段时间,为

java - Java IO 流中的同步方法

在Java1.0之后的类java.io.InputStream中有方法publicsynchronizedvoidmark(intreadlimit){}和publicsynchronizedvoidreset()throwsIOException{thrownewIOException("mark/resetnotsupported");}为什么这两个方法是同步的,而其他的都不同步? 最佳答案 这里有几个矛盾的事实表明synchronized关键字只是一个错误:当然,这只是对开发人员的提示。方法为空且synchronized关键字

java - Java IO 流中的同步方法

在Java1.0之后的类java.io.InputStream中有方法publicsynchronizedvoidmark(intreadlimit){}和publicsynchronizedvoidreset()throwsIOException{thrownewIOException("mark/resetnotsupported");}为什么这两个方法是同步的,而其他的都不同步? 最佳答案 这里有几个矛盾的事实表明synchronized关键字只是一个错误:当然,这只是对开发人员的提示。方法为空且synchronized关键字