Jul*_* A. 0 java concurrency multithreading
我相信我已经看到了"拥有一台显示器"的表达,并且"拥有一把锁".我想验证只有一台显示器可以"拥有".锁定是"获得",而不是拥有.如果那是错的,我会欣赏在Java多线程环境中正确使用"自己"和"获取".
小智 5
锁是一种数据,逻辑上是堆内存中对象头的一部分.JVM中的每个对象都具有此锁(或互斥锁),任何程序都可以使用该锁来协调对对象的多线程访问.如果任何线程想要访问该对象的实例变量; 然后线程必须"拥有"对象的锁(在锁定存储区中设置一些标志).尝试访问对象变量的所有其他线程必须等到拥有线程释放对象的锁(取消设置标志).
一旦一个线程拥有一个锁,它就可以多次再次请求同一个锁,但是在它可用于其他线程之前必须释放相同的次数.例如,如果一个线程请求锁三次,那么该线程将继续拥有该锁,直到它"释放"它三次.
Monitor是一种同步构造,它允许线程同时具有互斥(使用锁)和协作,即使线程等待某些条件为真的能力(使用wait-set).
换句话说,与实现锁定的数据一起,每个Java对象在逻辑上与实现等待的数据相关联.锁可以帮助线程独立地在共享数据上工作而不会相互干扰,而等待集帮助线程彼此协作以共同朝着共同的目标工作,例如,所有等待的线程将被移动到此等待集,并且所有线程将被通知一旦锁定被释放.这个等待集有助于构建监视器,并提供锁定(互斥)的额外帮助.