草庐IT

safe-publication

全部标签

java - volatile 保证可变对象的安全发布?

通过阅读Java并发实践我能看到:要安全地发布对象,对象的引用和对象的状态必须同时对其他线程可见。正确构造的对象可以通过以下方式安全发布:从静态初始化程序初始化对象引用将对它的引用存储到volatile字段或AtomicReference将对它的引用存储到正确构造的对象的最终字段中将对它的引用存储到一个由锁。但是,我对第二个成语感到困惑。由于volatile只能保证引用对另一个线程可见,但它不同步它引用的对象构造。那么它如何保证可变对象被正确构造,正在构造这个对象的线程被另一个线程中断了? 最佳答案 我们需要证明构造一个对象并将其分

java - 如何使用单个 replaceAll 查找 Java 中两个字符串的公共(public)字符?

假设我有:Strings="1479K";Stringt="459LP";我想回去StringcommonChars="49";两个字符串之间的共同字符。显然可以使用如下标准循环:StringcommonChars="";for(i=0;i但是我希望能够使用replaceAll在一行中完成此操作。这可以按如下方式完成:StringcommonChars=s.replaceAll("["+s.replaceAll("["+t+"]","")+"]","");我的问题是:是否可以使用一次replaceAll调用来做到这一点?什么是正则表达式?我想我必须使用某种前瞻性,但当我想到它时,我的大

java - 包私有(private)类中的公共(public)成员

我想知道在包私有(private)类中有公共(public)成员是否可以(不被认为是不好的做法)。我倾向于将public关键字添加到我的默认可见性类的成员,以指示此类成员是类API的一部分。我这样做只是为了可读性,因为在这种情况下,公共(public)成员与没有任何访问修饰符的成员具有基本相同的可见性(即包可见性)。对吗?例子:classModuleImplementationClass{privateintfieldA;privateStringfieldB;privatevoidsomeClassInternalMethod(){//impl}publicintdoSth(){//

java - 无法在内部类中声明 Public static final String s = new String ("123")

我尝试声明一个类,如下所示classOuter{privatefinalclassInner{publicstaticfinalStrings1=newString("123");publicstaticfinalbyte[]bytes=newbyte[]{0x00,0x01};publicstaticfinalStrings2="123";publicstaticfinalbytebyte1=0x02;}}在上面的代码中,s1和bytes无法编译,但s2和byte1可以编译。如果我将整个常量声明放在外部类中,它就可以正常工作。我错过了什么。有帮助吗? 最佳

java - 创建泛型类的公共(public)内部类的实例

所以我有如下内容:publicclassEnclosing>{//non-relevantcodesnippedpublicclassInner{privateTvalue;publicInner(Tt){value=t;}}}万物皆可编译,天下皆大欢喜。但是,每当我尝试创建Enclosing.Inner的实例时如下,我不行:newEnclosing.Inner(5);出现以下错误:CannotallocatethemembertypeEnclosing.Innerusingaparameterizedcompoundname;useitssimplenameandanenclosin

java - 从哪里调用 public static void main ?

我只是想知道我们的主要方法实际上是从哪里调用的。就像在eclipse中一样,当我们将它作为应用程序运行时,它会自动被调用。但是,如果我编写另一个具有相同签名但名称不同的方法,则它不会被调用 最佳答案 来自Java虚拟机的文档:DESCRIPTIONThejavatoollaunchesaJavaapplication.ItdoesthisbystartingaJavaruntimeenvironment,loadingaspecifiedclass,andinvokingthatclass'smainmethod.Themethod

java - 如何为多个 Java Web 项目使用公共(public)库

我有四个不同的项目,我正在使用Weblogic来部署我的项目。有几个库(jar文件)对所有项目都是通用的。目前我的每个项目都有lib目录,并且有几乎相同的一组库。现在,是否可以在WAR文件之外拥有这个lib目录并访问它们。 最佳答案 抵制将jar文件放在容器的“共享”文件夹中的诱惑。最好将jar文件保留在它们现在所在的位置。现在使用共享文件夹听起来是个好主意,但将来您可能需要部署需要共享库但版本不同的应用程序。也就是说,我没有使用WebLogic的经验。在Tomcat中有一个共享文件夹,其中包含所有已部署应用程序通用的库。使用它不是

java - 为什么 JPA 实体中的属性不允许使用 "public"?

JPA2.0specification第22页说:Theinstancevariablesofaclassmustbeprivate,protected,orpackagevisibilityindependentofwhetherfieldaccessorpropertyaccessisused.Whenpropertyaccessisused,thepropertyaccessormethodsmustbepublicorprotected.为什么不允许公开访问? 最佳答案 对于公共(public)字段,代理将无法可靠地工作——

java - 抽象类或接口(interface)中的 public static final 字段

我有很多抽象类的子类,每个子类都声明了一个同名的publicstaticfinal字段。我在考虑在抽象父类(superclass)中有这个字段而不初始化它,并希望每个子类都被强制初始化它。我之所以想到这一点,是因为我的抽象类的所有子类都声明了一个名为UNIQUE_ID的公共(public)静态最终字符串字段,并且每个子类都必须声明一个具有完全相同名称的字段。我希望我的问题足够清楚,如果不是请告诉我。可以做一些或多或少等同于此的事情吗?编辑:添加代码:我的抽象类如下所示:publicabstractclassExperimentPanelModelextendsPanelizable{p

java - 有什么方法可以强制类在 Java 中具有 public static final 字段?

有没有办法强制Java中的类具有publicstaticfinal字段(通过接口(interface)或抽象类)?或者至少只是一个公共(public)领域?我需要以某种方式确保一组类有publicstaticfinalStringTYPE="...";在其中。 最佳答案 不,你不能。你只能强制他们有一个非静态的getter方法,它会为每个子类返回适当的值:publicabstractStringgetType();如果你需要将某物的每个子类映射到一个值,而不需要实例化它,你可以创建一个publicstaticMap,String>t