在EMF模型中使用Java关键字volatile

时间:2014-12-17 15:45:34

标签: java concurrency eclipse-rcp volatile emf

我们将EMF 2.7与多线程Eclipse RCP 3.x应用程序一起使用。现在,一些EMF模型和特性/属性分别由不同的线程访问。所以我们需要制作那些变量volatile [1]。

.ecore或.ecorediag文件中是否有一种方法可以配置EMF模型的属性,使代码生成器在生成的模型代码中自动添加volatile关键字?或者我们是否必须在生成的代码中手动添加它(因为它不合适......)?

如果' volatile'那将非常有用。可以在模型定义中指定,而不是在生成的代码中指定。

以下是生成的EMF模型中手动添加的volatile的示例:

public class EGuiStateImpl extends MinimalEObjectImpl.Container implements 
     EGuiState {
/**
* @generated NOT
*/
protected volatile ESummary summary;

[1] Java关键字volatile用于表示变量的值将被不同的线程修改。

2 个答案:

答案 0 :(得分:1)

默认情况下,EMF生成的模型不适用于多线程。 EMF中的“易失性”意味着属性(a.k.a,feature)不会生成任何字段,它与Java中的volatile语法无关。 (您应该阅读EMF书或至少EMF Refcardz)

您可以随时修改javajet模板以生成不同的代码,但不建议这样做,因为默认的EMF生成不是为多线程设计的。

如果您需要基于EMF的多线程应用程序,请考虑使用也支持事务的EMF CDO

答案 1 :(得分:0)

在EClass下的ecore模型中,选择要使其变为volatile的EAttribute或EReference。右键单击 - >显示属性。在属性视图的末尾有一个Volatile设置,默认为“false'。

注意:我还没有真正尝试过,但我猜测改变应该有效。