Tag: 同步

Java中的线程安全单例

关于Singletons的维基百科文章提到了一些线程安全的方法来实现Java中的结构。 对于我的问题,让我们考虑具有冗长的初始化过程的单身人士,并一次由许multithreading共享。 首先,这个未提到的方法是线程安全的,如果是的话,它是同步的? public class Singleton { private Singleton instance; private Singleton() { //lots of initialization code } public static synchronized Singleton getInstance() { if(instance == null) { instance = new Singleton(); } return instance; } } 其次,为什么下面的实现线程安全和初始化懒? 如果两个线程同时进入getInstance()方法,会发生什么? public class Singleton { private Singleton() { //lots of initialization code } private static class SingletonHolder […]

为什么在.NET中没有通用的同步队列?

我注意到你可以调用Queue.Synchronize来获得一个线程安全的队列对象,但是同样的方法在Queue <T>上是不可用的。 有谁知道为什么? 似乎有点怪异。

什么是在Java中的同步方法

Java中同步方法和同步块的主要思想是什么? 我们为什么要使用它们? 示例代码会很好。 我已阅读有关同步方法的Java文档,但我没有得到这个想法。 这是Java文档代码 public class SynchronizedCounter { private int c = 0; public synchronized void increment() { c++; } public synchronized void decrement() { c–; } public synchronized int value() { return c; } }

Java同步不按预期工作

我有一个“简单”的4类示例,可靠地显示来自多个机器上的Java同步的意外行为。 正如你可以在下面看到的,给定java sychronized关键字的合同, Broke Synchronization不应该从类TestBuffer打印出来。 这里是四个类将重现这个问题(至less对我来说)。 我对如何解决这个破碎的例子不感兴趣,而是为什么它首先打破 。 同步问题 – Controller.java 同步问题 – SyncTest.java 同步问题 – TestBuffer.java 同步问题 – Tuple3f.java 这里是我运行它时得到的输出: java -cp . SyncTest Before Adding Creating a TestBuffer Before Remove Broke Synchronization 1365192 Broke Synchronization 1365193 Broke Synchronization 1365194 Broke Synchronization 1365195 Broke Synchronization 1365196 Done 更新:@格雷有迄今为止打破最简单的例子。 他的例子可以在这里find: 奇怪的JRC比赛条件 根据我从其他人处获得的反馈,在Windows和OSX上的Java 64位1.6.0_20-1.6.0_31(不确定更新的1.6.0)可能会出现此问题。 没有人能够重现Java 7上的问题。它可能还需要一个多核机器来重现这个问题。 […]

Android Studio如何手动运行gradle同步?

我正在debuggingAndroid Studio中的Gradle问题,并看到“运行gradle同步”的引用,但我不知道如何运行此命令。 如何从Android Studio或Macterminal运行“Gradle同步”?

为什么在同步块中使用volatile?

我在java中看到了一些例子,他们在代码块上进行同步以更改某个variables,而该variables最初被声明为volatile。我看到,在一个单例类的例子中,他们声明了唯一实例是volatile,并且它们同步了块初始化该实例…我的问题是为什么我们声明它是同步的,为什么我们需要做这两个? 是不是其中之一是足够的? public class someClass { volatile static uniqueInstance = null; public static someClass getInstance() { if(uniqueInstance == null) { synchronized(someClass.class) { if(uniqueInstance == null) { uniqueInstance = new someClass(); } } } return uniqueInstance; } 提前致谢。

嵌套同步关键字

我在Java中有这样的代码: public void doSomeThing() { synchronized (this) { doSomeThingElse(); } } public void doSomeThingElse() { synchronized (this) { // do something else } } 这个代码可以阻止吗? 我的意思是,这个代码可以永远等待吗?

open(2)中的O_SYNC和O_DIRECT标志是不同的/相似的?

O_SYNC和O_DIRECT标志的使用和效果非常混乱,并且在各个平台之间似乎有所不同。 从Linux手册页(请参阅此处的示例),O_DIRECT提供了同步I / O,最大限度地减less了caching效应,并且需要您自己处理块大小alignment。 O_SYNC只保证同步I / O。 尽pipe两者都保证数据写入硬盘caching,但我相信直接I / O操作应该比简单的同步I / O更快,因为它们绕过了页面caching(虽然FreeBSD的open(2)手册页声明当使用O_SYNC时,高速caching被旁路,见这里 )。 O_DIRECT和O_SYNC标志之间的区别究竟是什么? 一些实现build议使用O_SYNC | O_DIRECT。 为什么?

并发线程同时添加到ArrayList – 会发生什么?

我们有多个线程调用ArrayList上的add(obj) 。 我的理论是,当两个线程同时调用add时,只有两个被添加的对象中的一个真的被添加到ArrayList 。 这是可信的吗? 如果是这样,你怎么解决这个问题? 使用像Vector这样的同步集合?

在Java中重写同步方法

比方说,我有一个类的同步方法: abstract class Foo { public synchronized void foo() { // synchronized! // … }; } 我没有使用synchronized修饰符而覆盖它: class Bar extends Foo { @Override public void foo() { // NOT synchronized! super.foo(); // … } } 我有几个关于这个场景的具体问题: 重写的方法是否会被隐式地同步? 如果没有, super调用是否会同步? 如果没有super调用,什么都可以同步? 有没有办法强制重写方法使用synchronized (我注意到抽象方法定义或接口内的方法定义不允许synchronized关键字)?