小编And*_*rey的帖子

Java线程安全列表

我有一个List,它可以在线程安全上下文中使用,也可以在非线程安全上下文中使用.它将是哪一个,是不可能事先确定的.

在这种特殊情况下,每当列表进入非线程安全上下文时,我都会使用它进行包装

Collections.synchronizedList(...)

但我不想包装它,如果不进入非线程安全的上下文.Fe,因为列表很大并且使用密集.

我读过Java,它的优化策略是严格的多线程 - 如果你没有正确地同步你的代码,它不能保证在线程间上下文中正确执行 - 它可以重新组织代码,提供一致性仅在一个线程的上下文中(参见http://java.sun.com/docs/books/jls/third_edition/html/memory.html#17.3).铁,

OP1; OP2; OP3;

可以重组

OP3; OP2; OP1;

,如果它产生相同的结果(在单线程上下文中).

现在我想知道,如果我

  1. 填写我的列表,然后再用synchronizedList包装它,

  2. 把它包起来,

  3. 然后由不同的线程使用

, - 是否有可能,不同的线程会看到此列表仅部分填充或根本未填充?JVM可能推迟(1)直到(3)之后?是否有一种正确而快速的方法使(大)List成为线程安全的非线程安全的?

java multithreading

13
推荐指数
1
解决办法
3万
查看次数

将参数传递给从资源包到**以外的组件的消息:outputFormat**

是否有一种方便的方法将参数传递给从资源包到除h:outputFormat以外的组件的消息?

例如,这是合法的:

<h:outputFormat value="#{myBundle['parametricMessage']}">
    <f:param value="#{myBundle['someParameterValue']}"/>
</h:outputFormat>
Run Code Online (Sandbox Code Playgroud)

但我需要一个按钮,像这样(这将无法工作):

<h:commandButton value="#{myBundle['parametricMessage']}">
    <f:param value="#{myBundle['someParameterValue']}"/>
</h:commandButton>
Run Code Online (Sandbox Code Playgroud)

当然,我可以使用链接而不是按钮,我可以通过托管bean中的属性来实现,但在这个问题中,我正在寻找一种方便的方式来使用按钮...

我正在使用RichFaces 3.3.3,JSF2,facelets.

jsf resourcebundle richfaces facelets jsf-2

10
推荐指数
1
解决办法
2万
查看次数

标签 统计

facelets ×1

java ×1

jsf ×1

jsf-2 ×1

multithreading ×1

resourcebundle ×1

richfaces ×1