Java程序猿搬砖笔记(十)
synchronized锁定的对象
synchronized修饰的作用:
让多个线程排队依次获取某个资源,保证数据不会出错(原子性)。
synchronized锁定的元素:
- 修饰方法
- 静态方法,锁定的是类
- 普通方法,锁定的时方法的调用者
- 修饰代码块,锁定的时传入的对象
Java线程内存模型(JMM)定义的8中原子操作
- read(读取):从主内存中读取数据
- load(载入):将主内存读取到的数据写入工作内存
- use(使用):从工作内存读取数据来计算
- assgin(赋值):将计算好的值重新赋值到工作内存中
- store(存储):将工作内存数据写入主内存,会经过总线,到总线后就开始广播其他线程
- write(写入):将store过去的变量值赋值给主内存中的变量
- lock(锁定):将主内存变量加锁,标识为线程独占状态
- unlock(解锁):将主内存变量解锁,解锁后其他线程可以锁定该变量
MESI缓存一致性协议:
多个cpu从主内存读取同一个数据到各自的高速缓存,当其中某个cpu修改了缓存里的数据,该数据会马上同步回主内存,其他cpu通过总线嗅探机制可以感知到数据的变化从而将自己缓存里的数据失效。
一般lock锁加在线程的赋值之后,存储之前,这样的锁的粒度不大。volatile保证数据可见性、synchronized保证原子性。
Jenkins学习笔记
Jenkins构建项目的几种方式
Jenkins简单的PipeLine流水线脚本
Windows:
1 | pipeline { |
Linux:
1 | 把bat改为sh |
注意:pipeline、stages、stage、steps、checkout…这些词不能改
构建遇到问题:java.lang.NoSuchMethodError: No such DSL method ‘pipeline’ found among steps [bat, build, checkout, container, containerLog, input, junit, library, libraryResource, load, milestone, node, parallel, podTemplate, powershell, properties
解决方法:成功安装PipeLine插件。