Java里static
和non-static
synchronized方法锁住的分别是对象
和类
,因而是可以同时执行的,那么会存在修改问题吗?搜索没有得到比较关联的答案,来这里问问大家:
示例代码如下:
public class Test {
private static int staticVariableOne = 0;
public synchronized void nonStaticFunction() {
// do some works
staticVariableOne++;
// do some works
}
public synchronized static void staticFunction() {
// do some works
staticVariableOne++;
// do some works
}
}
以上,两个线程分别同时调用nonStaticFunction()和staticFunction(),会出现这种情况(导致一次修改丢失)吗:
1. nonStaticFunction 读 staticVariableOne = 0
2. nonStaticFunction 阻塞
3. staticFunction 读 staticVariableOne = 0
4. staticFunction 写 staticVariableOne = 1
5. nonStaticFunction 继续
6. staticFunction 写 staticVariableOne = 1
参考StackOverflow问题:
http://stackoverflow.com/ques...
但是,还是意犹未尽,还请各位多多指教、探讨!
补充:
运行如下测试程序,最后的结果并不是20000,中间有很多次结果都被覆盖了。