源代码操作(添加synchronized块)会更改变量范围

时间:2013-05-11 04:13:50

标签: java scope

我正在编写路径分析工具,我使用jdt Astparser来修改源代码 如果我想在每个原始行之后添加一些代码并让它们成为原子操作而不改变源代码的行为。像这样: 原始源代码:

int a = 0;
int b = 0;
a = b;
操作后

synchronized (lock) {
int a = 0;  //original code
//my code
//....
//end
}
synchronized (lock) {
int b = 0;  //original code
//my code
//....
//end
}
synchronized (lock) {
a = b;  //original code
//my code
//....
//end
}

但是它改变了变量范围,变量a和b不再是全局的,代码也无法编译。

是否有任何方法可以将变量声明和我之后插入的代码组合在一起,让它们成为原子操作而不改变变量范围?

...对不起我的英语:)

1 个答案:

答案 0 :(得分:1)

不要在块中声明它们。这与初始化本身无关。

int a, b;

synchronized (lock) {
    a = 0;
}
synchronized (lock) {
    b = 0;

}
synchronized (lock) {
    a = b; 
}

我不确定你为什么要使用三个synchronized块,除非代码比你的例子建议的要复杂得多。