使用同一个对象锁+synchronized实现线程同步
class RunnableCase2 implements Runnable{public void run() {
synchronized (this) {
try {
System.out.println(Thread.currentThread().getId()+"-start");
Thread.sleep(5000);
System.out.println(Thread.currentThread().getId()+"-end");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
测试
RunnableCase2 r2 = new RunnableCase2();
Thread t1 = new Thread(r2);
Thread t2 = new Thread(r2);
t1.start();
t2.start();
输出
9-start
9-end
10-start
10-end
----------------------------------------------------------
以下不能实现线程同步,因为不是用的同一个对象锁
class ThreadCase2 extends Thread{
public void run(){
synchronized(this){
try {
System.out.println(Thread.currentThread().getId()+"-start");
Thread.sleep(5000);
System.out.println(Thread.currentThread().getId()+"-end");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
ThreadCase2 t1 = new ThreadCase2();
ThreadCase2 t2 = new ThreadCase2();
t1.start();
t2.start();