我看 JAVA 之 线程同步(上)
我看 JAVA 之 线程同步(上)
Java 编程语言的优点之一是它在语言级别支持多线程。这种支持主要集中在同步上:协调多个线程之间的活动和数据访问。Java 用来支持同步的机制是管程 Monitor。本文描述了如何在指令集中支持监视器的,即数据的锁定和解锁。
管程 Monitors
Java 的监视器支持两种线程同步:互斥和协作。互斥(mutualexclusion)是 Java 虚拟机通过对象锁支持的,它使多个线程能够独立地处理共享数据,而不会相互干扰。Java 虚拟机通过类对象的 wait 和 notify 方法支持协作,使线程能够朝着一个共同的目标协同工作。
synchronized 关键字及 wait()/wait(long timeout)/wait(long timeout, int nanos)、notify()/notifyAll() 是 java 管程的组成部分。
对象锁
锁分为对象锁和类锁(Class 对象锁)
同步
同步分为以下两种:
同步代码块
同步方法
同步实例方法
同步类方法
例子
复制代码
javap 执行后如下片段:
复制代码
以上例子说明如下:
同步代码块使用 monitorenter 和 monitorexit
两条指令解决同步问题,而同步方法使用 ACC_SYNCHRONIZED 标示。
我看 java 之 线程同步(下)将对对象头、objectmonitor 和 1.6 同步锁优化进行详细介绍。
评论