某个类包含一个同步方法A和一个非同步方法B,A和B都要访问该类的同一个成员变量C.问题是当线程T1拿到了对象锁且正在执行A,线程T2是否可以在执行B的时候访问成员变量C
public class simpleTest {
public static void main(String[] args) throws InterruptedException {
final A a = new A();
Thread t = new Thread(new Runnable(){
public void run() {
a.method1();
}
},"subThread");
t.start();
Thread.sleep(5000);
a.method2();
}
}
class A{
public int number = 100;
public synchronized void method1(){
number = 1000;
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+":number="+number);
}
public void method2(){
System.out.println(Thread.currentThread().getName()+":number="+number);
}
}
输出结果为:main:number=1000;subThread:number=1000
public class simpleTest {
public static void main(String[] args) throws InterruptedException {
final A a = new A();
Thread t = new Thread(new Runnable(){
public void run() {
a.method1();
}
},"subThread");
t.start();
Thread.sleep(5000);
a.method2();
}
}
class A{
public int number = 100;
public synchronized void method1(){
number = 1000;
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+":number="+number);
}
public void method2(){
number = 2000;
System.out.println(Thread.currentThread().getName()+":number="+number);
}
}
输出结果为: main:number=2000; subThread:number=2000