Java安全的发布对象

在静态初始化函数中初始化一个对象的引用(不推荐),缺点:用不用都会初始化对象,如果初始化工作较多,加载速度会变慢,影响系统性能,将对象的引用保存到 类型或 对象中(推荐),在静态初始化函数中初始化一个对象引用

Java多线程之有序性

另外,JVM具备一些先天的有序性,即不需要额外的手段就能保证有序性,即Happens-before原则,如果两个操作的执行次序,没有办法通过Happens-before原则推导出来,虚拟机进行随意的重排序,那么就不能保证有序性,, , 通过 , , 保证一定的有序性, , 保证每一时刻只有一个线程可以执行同步代码块,相当于让线程顺序执行同步代码,从而保证有序性,线程中断规则:对线程interrupt()方法的调用先行发生于被中断线程的代码检测到中断事件的发生,线程启动规则:Thread对象的start()方法先行发生于此线程的每个一个动作

多线程之线程可见性synchronized

可以看到线程 A 之前在同一个锁保护的同步代码块中的所有操作结果,那么线程 B 都可以看到线程 A unlock M 之前的操作,线程 B 随后进入由同一个锁保护的同步代码块,那么线程 B 就不一定能看到线程 A 中的操作

Java多线程之可见性之volatile

对 变量进行写操作时,会在写操作后加入一条 屏障指令,将工作内存变量值刷新到主内存,通过加入内存屏障和禁止重排序优化来实现,保证可见性不保证原子性,对变量的写操作不依赖当前值,这样就会出现线程不安全问题

AtomicStampedReference解决CAS的ABA问题

从而解决ABA问题,线程将某个变量值由A修改为B,ABA解决方案,把变量的版本号进行更新

Shell三大利器之grep

搜索多个文件并查找匹配文本在哪些文件中:,在 grep 搜索结果中包括或者排除指定文件:,统计文件或者文本中包含匹配字符串的行数 -c 选项:,grep 递归搜索文件

AtomicReference原子性引用

AtomicReference 不能保证对象中若存在属性值修改是线程安全的,AtomicReference类提供了一个可以原子读写的对象引用变量,不安全的修改自定义对象属性的值,多个线程同时从引用中获得对象

线程安全之原子性Atomic(AtomicInteger|LongAdder|AtomicLong)

其中热点数据value会被分离成多个cell,比如说它可以将AtomicLong内部核心数据value分离成一个数组,在失败几率很高的情况下,争夺单个变量的线程会减少

CountDownLatch和Semaphore使用场景

这时就必须控制最多只有10个线程能够拿到数据库连接进行操作,CountDownLatch比较适合保证线程执行完后再执行其他处理,就可以使用Semaphore做流量控制,就是信号量, 可以阻塞线程并且可以控制同时访问线程的个数,通过 获取一个许可,如果没有获取到就继续等待,通过 释放一个许可

Java内存模型 - 同步八种操作

解除变量的锁定状态,变量才会被解锁,在执行引擎使用这个变量前,将该值从变量中取出

入门小站