synchronized 深入理解

下看下面代码 

大家猜猜日志应该是怎么样。

--aa--
--aa等等10秒--
---bb-
--bb等等10秒--

日志如上 不知道你猜到了吗

为什么会这样    因为加了一把类对象锁 SysThread.class 

在类型内部可以理解有一个monitor方法。

把加锁的通知 告诉monitor ,等结束在告诉monitor

同理 如果

synchronized 放到方法 这个monitor对象 就是所在对象。
synchronized 放到静态方法  这个monitor对象 就是所在类对象。

这样大家可以理解了
如果在一类上 所有方法 synchronized 所有方法都是串行
而不是 每个方法是串行。
synchronized  看看加锁的恐怖了。还敢随便枷锁吗?




package demo.thread;

public class SysThread {
public static void main(String[] args) {
	Thread   aa =new  Thread(new AA());
	Thread   bb =new  Thread(new BB());
	aa.start();
	bb.start();
}
}
class AA implements Runnable
{
 
	@Override
	public void run() {
		synchronized (SysThread.class) {
			System.out.println("--aa--");
			try {
				Thread.sleep(10000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}	
		}
		
	}
	
	}
class BB implements Runnable
{

	@Override
	public void run() {
		synchronized (SysThread.class) {
			System.out.println("---bb-");
			try {
				Thread.sleep(10000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}	
		}
		
		
	}
	
	}