java 锁2
并发,其实是多线程才有的场景。。。
java 多线程? 锁? 现在看来,即使已经工作了4、5年,这仍然不是一个简单的问题。
其实java 本身有提供锁的机制。 比如 Object对象的 wait 、notify 方法。synchronized 的原理不过是直接调用对应的对象的 wait方法罢了!
看tomcat 源码的时候,多线程的地方就是直接用到了 wait 、notify等方法 —— 这些方法真高级, 一般哪里会用得着???!!!
1 synchronized
其实这个算是容易学的东西了,相对于java concurrent 包下面的类而言:
1 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 如果其他方法是synchronized则答案是No,否则yes
2 代码块呢, synchronized(Object) {} ?当一个线程进入一个synchronized包围的代码块后, 是否可进入此代码块? No, 但是,当前代码块所在的对象没有被锁,仍然可以被访问(调用方法、其他代码块。。)。
同时,1、2可以是静态方法、代码块
问题1:
synchronized 加在静态方法(或代码块)前面, 对其他非静态的synchronized 方法是否有影响?
答案是No, 因为synchronized 加在静态方法时,锁定是类的class原型,synchronized 加在非静态方法时,锁定的是类的具体对象, —— 两者是不同对象!
类的class原型?? —— 这样说有些拗口,总之是不同对象!!!。
问题2:
synchronized 方法/代码块 里面嵌套synchronized, 会怎么样?
我的答案是: 得先处理好外层synchronized了再说! 难道不是很明显吗??...
2 Object对象的 wait 、notify 等方法
synchronized和Lock的区别?
http://blog.csdn.net/hintcnuie/article/details/11022049
Lock 和 synchronized 有一点明显的区别 —— lock 必须在 finally 块中释放。否则,如果受保护的代码将抛出异常,锁就有可能永远得不到释放!这一点区别看起来可能没什么,但是实际上,它极为重要。
-----
synchronized 同步的代码块可以由JVM自动释放;Lock 需要程序员在finally块中手工释放
3 java concurrent api
ReentrantReadWriteLock存在的意义: http://blog.csdn.net/doudou_bb_08/article/details/2400941
———— 一般来说,进行共享互斥会使程序性能变差,但将写入的共享互斥与读取的共享互斥分开思考,就可以提升程序的性能. 简单说是提高了read时候的性能,如果是write,则还是一样。
vilatile 这神马啊, 太难搞了。。xx
http://blog.csdn.net/fancyerII/article/details/6783224 又是一篇经典好长文。
java Condition。 http://www.cnblogs.com/pingyuyue/archive/2012/03/16/2400816.html 看得xx了
java 锁2的更多相关文章
- java 锁!
问题:如何实现死锁. 关键: 1 两个线程ta.tb 2 两个对象a.b 3 ta拥有a的锁,同时在这个锁定的过程中,需要b的锁:tb拥有b的锁,同时在这个锁定的过程中,需要a的锁: 关键的实现难点是 ...
- Java锁(一)之内存模型
想要了解Java锁机制.引发的线程安全问题以及数据一致性问题,有必要了解内存模型,机理机制了解清楚了,这些问题也就应声而解了. 一.主内存和工作内存 Java内存模型分为主内存和工作内存,所有的变量都 ...
- Java锁的种类
转载自:---->http://ifeve.com/java_lock_see/ Java锁的种类以及辨析锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchroniz ...
- JAVA 锁
JAVA 锁 锁的概念 Java中的锁是控制资源访问的一种方式.它弥补了synchronized的可操作性不强的不足. Java的锁都实现了Lock接口.Lock结构定义了锁的基本操作. 函数 解释 ...
- JAVA锁的可重入性
机制:每个锁都关联一个请求计数器和一个占有他的线程,当请求计数器为0时,这个锁可以被认为是unhled的,当一个线程请求一个unheld的锁时,JVM记录锁的拥有者,并把锁的请求计数加1,如果同一个线 ...
- JAVA 锁之 Synchronied
■ Java 锁 1. 锁的内存语义 锁可以让临界区互斥执行,还可以让释放锁的线程向同一个锁的线程发送消息 锁的释放要遵循 Happens-before 原则(锁规则:解锁必然发生在随后的加锁之前) ...
- java锁与监视器概念 为什么wait、notify、notifyAll定义在Object中 多线程中篇(九)
在Java中,与线程通信相关的几个方法,是定义在Object中的,大家都知道Object是Java中所有类的超类 在Java中,所有的类都是Object,借助于一个统一的形式Object,显然在有些处 ...
- 自己动手写java锁
1.LockSupport的park和unpark方法的基本使用,以及对线程中断的响应性 LockSupport是JDK中比较底层的类,用来创建锁和其他同步工具类的基本线程阻塞原语.java锁和同步器 ...
- Java 锁的学习
个人学习整理,所有资料均来源于网络,非原创. 死锁的四个必要条件:互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用.请求与保持条件(Hold and wait):已经得 ...
- java锁——wait,notify,synchronized
背景:这篇博客用来总结java锁相关的知识点,平时还是要自己多加练习 wait 和 notify以及notifyAll (1).方法介绍1.wait.notify以及notifyAll都是Object ...
随机推荐
- css高度自适应
何为高度自适应? 高度自适应就是高度能跟随浏览器窗口的大小改变而改变,典型的运用在一些后台界面中上面一栏高度固定用作菜单栏或导航栏,下面一栏高度自适应用于显示内容.高度自适应不像宽度自适应那样简单,在 ...
- css3简单的图片轮播
<style> @-webkit-keyframes move{ %{left:0px;} %{left:-500px;} } #wrap{ width:500px; height:100 ...
- 接口测试总结<转>
本文主要分为两个部分: 第一部分:主要从问题出发,引入接口测试的相关内容并与前端测试进行简单对比,总结两者之前的区别与联系.但该部分只交代了怎么做和如何做?并没有解释为什么要做? 第二部分:主要介绍为 ...
- IOCP入门
完成端口(Completion Port)详解 此文讲解最好,也很全面一下其他文章看看就行,也可不看. 单句柄数据,单IO数据 此文讲述比较清晰,可以辅助理解上文. IOCP编程之基本原理:http: ...
- CentOS详解top命令各个数据的含义
最近在docker(宿主机是centos虚拟机)里安装gitlab,发现随着时间的运行,虚拟机的内存持续走高,运行几个小时之后内存已经爆掉了,putty远程处理于假死状态. 这个时候就需要查看内存进程 ...
- [转]oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务。
oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相关视图 select * from dba_jobs; selec ...
- 第58讲:Scala中Abstract Types实战详解
这一讲我们来学习下抽像类型.让我们看下代码 package scala.learnimport scala.io.BufferedSourceimport scala.io.Source trait ...
- ORA-12569: TNS: 包校验和失败解决方法一例
经反复实验,发现OracleMTSRecoveryService服务使用端口1521,而这个端口默认是oracle数据库访问的监听端口.所以有两个办法,一是改变oracle数据库访问的监听端口,二是改 ...
- 对于git的认识
对于git的认识,我只想说,我不会把他的概念复制下来在博客上再发一遍,我对于他的了解是代源码的开放编写.对于git我会在今后去认真的理解他,不是所谓的抄袭.不会的东西我会尽力去学习.
- pc端和android端应用程序测试有什么区别?(ps面试题)
pc端和android端应用程序测试有什么区别?(ps面试题) [VIP7]大连-凭海临风(215687736) 2014/4/10 8:56:171.测试环境不同PC平台一般都是windows an ...