想测试下synchronized关键字,有点不明白
package Test;
public class TestThreadSync implements Runnable{
public TestThreadSync(){
}
Sync sync = new Sync();
@Override
public void run() {
synchronized (sync){
sync.function();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String args[]){
Thread t1 = new Thread(new TestThreadSync());
Thread t2 = new Thread(new TestThreadSync());
t1.start();
t2.start();
}
}
class Sync{
public Sync(){
}
public void function(){
System.out.println(Thread.currentThread().getName()+"正在运行。。。");
}
}
我的想法是t1,t2启动,打印“Thread-0正在运行。。。”5秒钟后再打印“Thread-1在运行。。。”为什么他们同时打印出来呢 synchronized不是把对象锁定了吗5秒后才释放的?请各位指点下
------解决方案--------------------代码改一下:
public static void main(String args[])
{
TestThreadSync tts= new TestThreadSync();//只创建一个TestThreadSync对象,
Thread t1 = new Thread(tts); //里面的sync是一个。才能起到同步的作用。
Thread t2 = new Thread(tts);
t1.start();
t2.start();
}