synchronized 线程锁问题。求教~(标题要够长,才能有人看)
public class TestSynchronized implements Runnable {
int a = 100;
public synchronized void show1() {
a = 1000;
try{
Thread.sleep(5000);
}catch(InterruptedException e){}
System.out.println("a = "+a);
}
public void show2(){
try {
Thread.sleep(2500);
a = 2000;
}catch(InterruptedException e){}
}
public void run() {
show1();
}
public static void main(String args[]) {
TestSynchronized ts = new TestSynchronized();
Thread tt = new Thread(ts);
tt.start();
ts.show2();
System.out.println(ts.a);
}
}
这是个简单的小例子,关键就去却与synchronized这个关键字上。我描述下问题。各位大大请看!
这个先是show1方法加了锁。用tt启动线程后,a被赋值成了1000后,show1进入睡眠状态 。主方法里又调用show2的方法。因为show2没有锁,所以a的值最后定位2000;
问题出在这里。
show2 加上了synchronized后。最后的结果都变成了1000.我想问的是~
是某两个方法加锁以后,必须执行完某一个方法,解锁后才能执行另一个有锁的方法吗?这个例题是有两个线程 一个是main的线程,一个是tt 线程。两个线程访问两个加锁的方法。只有一个方法执行完了才能执行另一个吗?
java里只有一个锁吗?
一直没有绕过这个弯,请熟悉的朋友来告诉下。谢谢