synchronized有四种用法:
synchronized method
synchronized(this)
synchronized(object)
synchronized(class)
估计大家最常用的就是synchronized method,这个用法显然有一个误解。字面意义是,就是同步该方法,同时只有一个线程可以运行该方法。但实际上,这远远不够。
synchronized method(){}
等价于
method()
{
synchronized(this){}
}
也就是说,锁定在this对象上,而不是方法上。
所以,如果一个类有多个synchronized方法,那么同时只能有一个线程运行一个synchronized方法。
所以在写同步方法时要考虑范围粒度是否太大,特别是在多个人同时维护公用代码时,要明白你加的synchronized方法不是独立存在的。
synchronized method
synchronized(this)
synchronized(object)
synchronized(class)
估计大家最常用的就是synchronized method,这个用法显然有一个误解。字面意义是,就是同步该方法,同时只有一个线程可以运行该方法。但实际上,这远远不够。
synchronized method(){}
等价于
method()
{
synchronized(this){}
}
也就是说,锁定在this对象上,而不是方法上。
所以,如果一个类有多个synchronized方法,那么同时只能有一个线程运行一个synchronized方法。
所以在写同步方法时要考虑范围粒度是否太大,特别是在多个人同时维护公用代码时,要明白你加的synchronized方法不是独立存在的。