最好是对函数getValue()中的一个变量同步,比如文件,而不是整个方法

解决方案 »

  1.   

    当然要用synchronized 了。呼呼……静态函数也没有例外
      

  2.   

    █████████
    █┏━━━━━┓█
    █★          ★█
    █    ☆  ☆    █
    █              █
    █ 〖初窥Java〗 █
    █ 【虚心学习】 █
    █★          ★█
    █┗━━━━━┛█
    █████████
      

  3.   

    在决定是否用同步时,首先要理解同步的作用是什么。大部分时候,同步会带来程序执行性能的下降,而且同步是死锁产生的根源之一。所以在允许的情况下,尽量不要用同步(否则多线程的优势就得不到有效的发挥)。想一想,我们为什么要用多线程呢,因为我们可能想让一个方法并发执行(也就是两个线程“同时”执行一个方法),但如果用同步,他们就不能同时执行了,这违背了多线程的初衷。但为什么还要有这个synchronized关键字呢?这是因为,多个线程同时访问某个资源(比如修改一个实例变量),可能会带来资源的破坏,比如,本来设想 i = 1 + 1 后i应该是2,但i实际是3,因为在i返回2之前,其他线程把i修改成3了。这种情况对执行 i = i + 1的线程来讲,i就“不同步”了。为了保证该运算在本执行线程中产生正确的输出,必须保证i在同时不会被其他线程修改,也就是要保证其“同步”,这就是synchronized关键字的作用。synchronized关键字和static关键字没有关系,你可以把它用在静态方法,也可以把它用在实例方法,还可以把它用在变量上。
      

  4.   

    楼主的想法绝对是误解
    象这样的方法public  static synchronized int getValue()
    {
    }
    如果仅仅是简单的返回一个值,加了同步,就会大大影响性能不要乱加synchronized ,尽量避免使用
      

  5.   

    为了数据一致性读和写都要同步:就是一个时刻只能有一个线程访问(读或写)那个资源
    当然实现的时候是按方法synchronized 还是按某个对象synchronized,就看实际情况了,同时需要考虑性能和死锁的问题
      

  6.   

    看你的getValue方法怎么写了,如果涉及到线程安全,那就加,如果没有就不用,很影响性能