Element没有附加源代码Java.Lang

时间:2012-09-26 14:23:03

标签: java javadoc

您好我正在尝试使用Double Object,而不是类型以便同步线程。这是家庭作业。

概述:此应用程序是银行系统的一个简单示例,它具有作为存储者和作为提取者运行的线程运行的线程。存款人增加10美元,提款人删除10美元,因此应用程序的结尾应该有10个不变的银行账户。

在每个班级(存款人和提款人)中,我能够在帐户对象上使用块同步来完成目标。所以我的作业的作业部分已经完成,我不需要帮助。

我开始思考,我觉得锁定整个Account对象是过度的。由于交易中唯一真正的关键部分是改变变量

 balance

最初可变余额是双倍的。我的目标是将变量更改为Double对象,然后将同步块移动到帐户对象内部,并且只围绕修改balance变量的代码部分。

当我将代码更改为Double时,没有错误,但我收到了一条注释:

This element has no attached source and the Javadoc could not be found in the attached Javadoc

此外,代码不起作用,因为我的值最终都出错了。

问题:

  1. 我的理论是否正确,我应该只能锁定Balance变量?
  2. 如何让我的代码识别Double的
  3. Java.lang代码

    由于

    这是一些代码......

    声明:

    private Double balance;
    

    构造

    this.balance = new Double(balance);
    

    锁定:

    synchronized(balance){
    
    balance = balance + amount;
    
    }
    

1 个答案:

答案 0 :(得分:1)

  

我的理论是否正确,我应该只能锁定Balance变量?

没有

synchronized(balance) {
    balance = balance + amount;
}

当您锁定balance时,您确实锁定的Double实例是 {/ 1>}的{em>值,而不是balance变量。但是,您使用不同的balance实例替换 balance中的值。如果某个其他线程出现,它可能会看到新的Double并在当前线程释放它(仍然)保留在旧Double上的锁之前获取锁。换句话说,你没有得到适当的互斥。此外,不满足“之前发生”关系的前提条件,因此线程可能会看到共享变量和对象的不一致版本。

如果要锁定实例变量,则需要锁定它是实例的对象。


  

如何让我的代码识别Double的Java.lang代码?

这是一个IDE问题。 IDE无法找到与IDE已配置使用的“rt.jar”文件对应的源JAR文件。这很可能是因为您要在IDE中使用JRE中的“rt.jar”文件。解决方案是重新配置IDE以使用与JRE对应的JDK。

请注意,这不会改变程序的工作方式。它只影响IDE在(例如)单步进入核心类时向您显示源代码的能力。