多线程——同步(synchronized)下
接着上一讲《多线程——同步(synchronized)上》
?
上一讲中说到的第二个例子,通过synchronized块,指定获取对象锁来达到同步的目的。那有没有其它的方法,可以通过synchronized方法来实现呢?
?
根据同步的原理:如果能获取一个共享对象锁或类锁,及可实现同步。那么我们是不是可以通过共享一个类锁来实现呢?
?
是的,我们可以使用静态同步方法,根据静态方法的特性,它只允许类对象本身才可以调用,不能通过实例化一个类对象来调用。那么如果获得了这个静态方法的锁,也就是获得这个类锁,而这个类锁都是TestThread类锁,及达到了获取共享类锁的目的。
?
实现代码如下:
?运行结果略,与例二中一样。
?
?
以上的内容主要是说明两个问题:同步块与同步方法。
1,同步块:获取的对象锁是synchronized(flag)中的flag对象锁。
2,同步方法:获取的是方法所属的类对象,及类对象锁。
???? 静态同步方法,由于多个线程都会共享,所以一定会同步。
???? 而非静态同步方法,只有在单例模式下才会同步。
?
?
接下来说一说能在synchronized内部运行的wait方法、notify方法与notifyAll方法。
先看一段JDK API 1.6 文档的原话:
?