博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中锁的分类
阅读量:7221 次
发布时间:2019-06-29

本文共 841 字,大约阅读时间需要 2 分钟。

1.内部锁

就是对象本身,每个Java对象都可以隐式地扮演一个用于同步的锁的角色;这些内置的锁被称

为内部锁(intrinsic locks)或监视器锁(monitorlocks)。执行线程进入synchronized块之前会

自动获得锁;而无论通过正常控制路径退出,还是从块中抛出异常,线程都在放弃对

synchronized块的控制时自动释放锁。获得内部锁的唯一途径是:进入这个内部锁保护的同步

块或方法。内部锁在Java中扮演了互斥锁(mutual exclusion lock,也称mutex)的角色,意味着

至多只有一个线程可以拥有锁,当线程A尝试请求一个被线程B占有的锁时,线程A必须等待或者

阻塞,直到B释放它。如果B永远不释放锁,A将永远等下去。同一时间,只能有一个线程可以运

行特定保护的代码块,因此,由同一个锁保护的synchronized块会各自原子地执行,不会相互

干扰。在并发的上下文中,原子性的含义不慌不忙 它在事务应用中相同---一组语句

(statements)作为单独的,不可分隔的单元运行。执行synchronized块的线程,不可能看到会

有其他线程能同时执行同一个锁保护的synchronized块。

 

2.Java中的私有锁对象

private Object lock = new Object();

public void foo(){
    synchronized(lock){
      ......
 }
}
使用私有锁对象,而不是对象的内部锁(或任何其它可公共访问的锁),有很多好处,私有的锁

对象可以封装锁,这样客户端代码无法得到它。然而可公共访问的锁允许客户端涉足它的同步

策略----正确或不正确地。客户端不正确地得到另一个对象的锁,会引起活跃度方面的问

题。

 

 

3.其它锁

我们还可针对代表某种共享资源的对象加锁。比如一些集合类等待。

转载于:https://www.cnblogs.com/zhizhuwang/p/3474729.html

你可能感兴趣的文章
Android 解决ListView 和 ScrollView 共存冲突的问题
查看>>
利用Power Designer反向数据库结构
查看>>
在ISA 2006企业版环境下配置存储服务器(CSS)
查看>>
使用Seam-gen生成基础项目骨架
查看>>
RHCE学习<13>RHCS集群(RHCS+GFS2+ISCSI)
查看>>
Java线程:线程私有变量
查看>>
[Web开发] Web 2.0 网站估价工具
查看>>
IE8 默认以Web Standards模式显示网页 全面遵循Web标准
查看>>
网站Web项目树形菜单的实现过程(ExtJS+SpringMVC+Spring+Hibernate+MySQL)
查看>>
深入浅出Attribute(中)——Attribute本质论
查看>>
Lync 小技巧-52-Lync 2013-不加域-客户端-2-导入-证书-信任链
查看>>
Drawable、Bitmap、Canvas和Paint的关系以及部分使用方法
查看>>
DeepEarth中的几何图形基础框架模型
查看>>
Enterprise Library Step By Step系列(十):缓冲应用程序块——进阶篇
查看>>
C# 对Excel操作时,单元格值的读取
查看>>
PreparedStatement--摘抄自http://blog.chinaunix.net/u/28512/showart_221625.html
查看>>
网络扫描程序的详细分析与实现
查看>>
SQL2005中时,Diagrams的问题
查看>>
每个分类取最新的几条的SQL实现
查看>>
智慧医疗“验血查癌”或会实现
查看>>