在下面的例子并发执行静态和非静态同步方法的问题?
- 如果不同的线程试图同时访问静态和 非静态同步方法,进而尝试 改变使用两种方法中的静态数据会发生什么?
- 使用run()方法的do-while循环到 是否有任何问题为每个非静态的 同步方法调用创建类BadDesign的新对象?
- 此Java代码是否正确同步?
下面是示例代码说明我的问题:
BadDesign.java
public final class BadDesign{
private static int sensitiveData;
public synchronized static void changeDataViaStaticMethod(int a){
//... updating the sensitiveData
sensitiveData = a;
}
public synchronized void changeDataViaNonStaticMethod(int b){
//... updating the sensitiveData
sensitiveData = b;
}
public static void showSensitiveDataStatic(){
System.out.println("Static: " + Thread.currentThread().getName()+ " - " + sensitiveData);
}
public void showSensitiveData(){
System.out.println(Thread.currentThread().getName() + " - " + sensitiveData);
}
public static void main(String[] args){
new Thread(new TestThread11()).start();
new Thread(new TestThread11()).start();
}
}
而且TestThread11.java
class TestThread11 implements Runnable{
public void run(){
int i = 0;
do{
BadDesign.changeDataViaStaticMethod(5);
BadDesign.showSensitiveDataStatic();
//... new object for every iteration
//... so synchronization of non-static method
//... doesn't really do anything significant here
BadDesign bd = new BadDesign();
bd.changeDataViaNonStaticMethod(10);
bd.showSensitiveData();
}while (i++ < 100);
}
}
我很累,很早在早上编辑一篇文章。我会让其他敏锐的编辑出现并占据这个堡垒。 ;-) –
@The精英绅士 - 你们不睡觉:P。考虑编辑它。 – Perception