在决定是否用同步时,首先要理解同步的作用是什么。大部分时候,同步会带来程序执行性能的下降,而且同步是死锁产生的根源之一。所以在允许的情况下,尽量不要用同步(否则多线程的优势就得不到有效的发挥)。想一想,我们为什么要用多线程呢,因为我们可能想让一个方法并发执行(也就是两个线程“同时”执行一个方法),但如果用同步,他们就不能同时执行了,这违背了多线程的初衷。但为什么还要有这个synchronized关键字呢?这是因为,多个线程同时访问某个资源(比如修改一个实例变量),可能会带来资源的破坏,比如,本来设想 i = 1 + 1 后i应该是2,但i实际是3,因为在i返回2之前,其他线程把i修改成3了。这种情况对执行 i = i + 1的线程来讲,i就“不同步”了。为了保证该运算在本执行线程中产生正确的输出,必须保证i在同时不会被其他线程修改,也就是要保证其“同步”,这就是synchronized关键字的作用。synchronized关键字和static关键字没有关系,你可以把它用在静态方法,也可以把它用在实例方法,还可以把它用在变量上。
楼主的想法绝对是误解 象这样的方法public static synchronized int getValue() { } 如果仅仅是简单的返回一个值,加了同步,就会大大影响性能不要乱加synchronized ,尽量避免使用
█┏━━━━━┓█
█★ ★█
█ ☆ ☆ █
█ █
█ 〖初窥Java〗 █
█ 【虚心学习】 █
█★ ★█
█┗━━━━━┛█
█████████
象这样的方法public static synchronized int getValue()
{
}
如果仅仅是简单的返回一个值,加了同步,就会大大影响性能不要乱加synchronized ,尽量避免使用
当然实现的时候是按方法synchronized 还是按某个对象synchronized,就看实际情况了,同时需要考虑性能和死锁的问题