Saj*_*ani 6 java variables final synchronized
Java中的最终变量是什么?例如:如果我final int temp;在函数中写入final关键字的含义是什么?
另外,我什么时候想使用final变量(作为类变量和函数变量)?
为什么同步块中的变量必须声明为final?
Jon*_*eet 14
基本上它只是意味着你无法改变价值.对于实例变量,您必须在构造函数中(或使用变量初始化程序)分配一次(并且仅一次)任何最终变量.同步是一个非常正交的概念.
使局部变量最终的主要原因是你可以在匿名内部类中使用它...这与在同步块中无关.
最后的变量是对一成不变的类有用,固然-和永恒让生活在多线程环境中更容易-但是这两个是我能想到的之间的唯一关系...
编辑:Wildwezyr的评论在不改变您正在同步的变量方面是有意义的.由于他给出的原因,这将是危险的.这就是"同步块中的变量"的含义吗?
Wil*_*zyr 14
最终变量和同步代码块确实有一些共同之处......如果你声明非final变量a然后写入,synchronized (a) { System.out.println('xxx'); }你会收到警告"非最终字段上的同步" - 至少在NetBeans中.
为什么你不应该在非最终领域同步?因为如果字段值可能改变,则不同的线程可能在不同的对象上同步(字段的不同值) - 因此根本不存在同步(每个线程可以同时进入同步块).
在这里查看通过在非最终字段上同步导致的现实问题的示例:http://forums.sun.com/thread.jspa?threadID = 5379204
| 归档时间: |
|
| 查看次数: |
10068 次 |
| 最近记录: |