并发编程总结
来源:互联网 发布:yunos删除预装软件 编辑:程序博客网 时间:2024/06/04 22:02
一、并发基础
1、用synchronized来修饰一个方法,如同给一个方法上了一把锁,当多个线程同时访问这个方法,每个线程都要先拿到这个锁才能执行这个方法,执行完方法之后释放锁,其他的线程继续“竞争锁”来抢锁,抢到之后执行再释放,循环结束。
2、多个线程多个锁,一个对象有一把锁,如果想用多个对象共享一把锁,用static修饰synchronized方法和变量,那么这个方法就是类级别的锁,无论多少个对象,获得的都是同一把类锁,而不是原来获取的对象锁。
3、如果同一个对象里面的方法有同步方法和异步方法,异步方法不需要获得锁直接执行,同步方法依然需要去竞争锁。
4、脏读:脏读意味着一个事务读取了另一个事务未提交的数据,而这个数据是有可能回滚的;
5、synchronized 锁重入,同步方法中调用同步方法,子类的同步方法继承父类的同步方法使用。
6、如果在同步方法的执行过程中碰到异常,会立马释放锁,让其他线程进入方法
7、对象加锁之后,如果对象发生改变,对象的锁就会释放。对象的属性发生改变是不影响对象锁。
8、字符常量加锁,需要new一个新的字符对象,因为字符串在内存中是指向同一个常量
9,使用volatile关键字在修饰变量,是这个变量在多个线程中可见,不具备原子性,公用,JDK1.5之后,在开启一个线程之后,jvm会在内存中开辟一个空间用以存放当前线程从主内存中copy过来的变量,使用的过程中和主内存中的变量是互相不干扰的,如果想要互通,那么需要使用volatile关键字修饰变量,在线程操作过变量之后,会同步到主内存之中。
10、如果想要volatile关键字修饰的变量具有原子性,可以使用原子类(AtomicInteger、AtomicBoolean...等等.)来替代volatile,volatile只具备多个线程可见的特性,算是一个轻量级的synchronized,不具有原子性。
11、Atomic只能保证本身方法的原子性,不能保证多个线程之间的原子性,想要保证多个线程之间的原子性,只能在外部加一把锁。
二、线程之间通信
12、使用wait,notify方法来实现线程之间的通信,这个两个方法是object的方法,必须配合sychronized方法使用,wait方法是释放锁,notify方法是不释放锁。
13,、可以使用CountDownLatch来实现线程之间的通信,countDownLatch相当于wait和notify的升级版,不需要搭配sychronized使用,countDownLatch.countDown();释放锁,countDownLatch.await();发起等待,把线程的控制权交给其他线程。
- 并发编程学习总结
- 并发编程学习总结
- 并发编程学习总结
- Java并发编程总结
- java并发编程总结
- Java并发编程总结
- Java并发编程-总结
- Java并发编程总结
- Java并发编程总结
- 并发编程总结
- Java并发编程总结
- Java并发编程-并发编程知识点总结
- Java并发编程-并发编程知识点总结
- ios并发编程的总结
- 13:java并发编程总结
- Go语言并发编程总结
- 多线程, 并发编程知识总结
- Java并发编程实践-总结
- ios通用链接(Universal Link)的处理
- LeetCode专栏L020_Valid_Parentheses
- Spring加载applicationContext.xml的路径问题
- 微信内置浏览器 用 JS 调用微信APP分享到微信朋友圈
- Android activity 去掉标题栏的三种方法
- 并发编程总结
- WebStrom 2017激活
- 嵌入式工程师必须要懂的知识之-------上拉电阻与下拉电阻
- c语言知识结构
- 367. Valid Perfect Square
- GaLa Reinforcement v4.1 1CD
- 错误及其解决办法
- excel 在输入数据的时候,保证一列数据的唯一性
- 机器学习笔记1-k近邻算法的实现