关于Java 锁学习的笔记
2018-04-20 11:55
246 查看
锁就是在类的对象上或者类上的标记信息
synchronized关键字
Object o=new Object();Sync(o) 代表的含义是 锁住o指向的对象,锁定的是一个对象,而不是{}里的代码。代表的含义是:如果想执行{}里面的代码,必须先申请o这个对象的锁。如果第一个线程已经申请了,得二个线程就得在外面等待锁释才能执行{}里面得代码。互斥锁
public sync void a(){}===>sync(this){}
public sync static void a(){}===>sync(T.class) //静态方法没有this
同步方法和非同步方法可以同时执行,只是同步方法需要申请锁。
如果写方法加锁,读方法不加锁。容易出先脏读,会读写还未完成得操作
同一个线程里面,同步方法可以调用同步方法,只是在锁得标记信息+1 (重入锁)
两个线程得通信:1.共享内存 2.互相发消息 java多线程得通信模型
当两个线程访问同一块内存时才需要同步
sync遇到异常锁会被释放
voliate关键字 使多个线程透明可见,具有内存可以性,禁止指令重排序
java 对线程处理得内存模型:
不用voliate读完只会就不去再去主内存读数据(不一定,cup空闲也可能会更新,只是不确定),别的线程改了之后会更新到主内存
加了voliate之后会通知其他线程更新缓存
只保证可见性,有读写得时候可能值不一致,没来得及收到更新。对于这一块得操作可以使用java具有原子性得操作类,比如数字操作AtomicInteger
wait()等待和notify()唤醒是配对的,但是notify()不会释放锁。
多线程直接通信用current包中的CountDownLatch
lock.lock()====>sync(this) 手动锁,需要在finally中调用lock.unlock
lock.tryloock()返回ture/false 代表尝试锁定
相关文章推荐
- 30日学习笔记,关于java的IO系统已经Decorarot模式
- Java学习笔记之五——关于"equals"和“==”的区别
- 【Java学习笔记】Java中关于tostring方法的误操作
- JAVA学习笔记_关于异常机制处理问题
- java学习笔记:关于IO转换流InputStreamReader和OutputStreamWriter
- JAVA学习笔记(三)---关于JAVA中的栈内存、堆内存
- java中关于this的学习笔记
- Android开发学习笔记(五):关于R.java消失或无法更新的问题
- Go学习笔记 - 关于Java、Python、Go编程思想的不同
- 关于java的重写和隐藏的学习笔记。
- JAVA学习笔记(12)关于正则表达式
- nutch-1.7-学习笔记(2)-org.apache.nutch.crawl.Generator.java-关于Hadoop的partition
- Java程序员的C#学习笔记(关于.NET的理解)
- JAVA学习笔记--关于System.out.println()
- java学习笔记,试用初学者,第二节,关于内存地址分配问题
- Java 学习笔记23:关于Java Session使用
- java学习笔记1-关于throw和throws的一点总结
- Java学习笔记-关于默认类型或访问权限的总结
- 关于JAVA中 内部类的几点学习笔记