1. Java并发 - wait和notify

    在多线程编程中,一个线程因其执行目标动作所需的保护条件未满足而被暂停的过程就被称为等待(Wait)。 一个线程更新了系统的状态,使得其他线程所需的保护条件得以满足的时候唤醒那些被暂停的线程的过程就被称为通知(Notify)。 在Java平台中,Object.wait()/Object.wait(long)以 及Object.notify()/Object.notifyAll() 可用于实现等待和通知:Object.wait()的作用是使其执行线程被暂停(其生命周期状态变更为WAITING), 该方法可用来实现等待;Object.notify()的作用是唤醒一个被暂停的线程,调用该方法可实现通知。 相应地,Object.wait()的执行线程就被称为等待线程;Object.notify()的执行线程就被称为通知线程。 由于Object类是Java中任何对象的父类,因此使用Java中的任何对象都能够实现等待与通知。

    2021/08/22 concurrent

  2. Java基础 - static 关键字

    static关键字可以用来修饰代码块表示静态代码块,修饰成员变量表示全局静态成员变量,修饰方法表示静态方法。

    2021/08/22 Java

  3. JVM - javap指令

    javap是jdk自带的反解析工具。它的作用就是根据class字节码文件,反解析出当前类对应的code区 (汇编指令)、本地变量表、异常表和代码行偏移量映射表、常量池等等信息。

    2021/08/22 JVM

  4. Java并发 - CAS与原子变量

    在 Java 并发领域,我们解决并发安全问题最粗暴的方式就是使用 synchronized 关键字了,但它是 一种独占形式的锁,属于悲观锁机制,性能会大打折扣。volatile 貌似也是一个不错的选择,但 volatile 只能保持变量的可见性,并不保证变量的原子性操作。

    2021/08/06 concurrent

  5. 设计模式之 - 单例模式

    单例模式是软件开发过程中经常用到的一种设计模式,但如果优雅的实现单例模式,并不是一个简单的问题。

    2021/08/06 设计模式

  6. JVM - 对象的内存布局

    在 HotSpot 虚拟机里,对象在堆内存中的存储布局可以划分为三个部分:对象头(Header)、 实例数据(Instance Data)和对齐填充(Padding)。

    2021/07/29 JVM

  7. JVM目录汇总

    JVM知识梳理 内存区域 Class对象 JVM - 类加载器 引用类型 垃圾回收

    2021/07/29 JVM

  8. JVM - jstack工具

    jstack是JDK中自带的Java工具之一,用于生成虚拟机当前时刻的线程快照,含有正在执行的方法堆栈的集合信息, 生成线程快照的主要目的是定位线程出现长时间停顿的原因, 如线程间死锁、死循环、请求外部资源导致的长时间等待等问题。

    2021/07/29 JVM

  9. Java并发 - 锁分类

    锁概述 线程安全问题的产生前提是多个线程并发访问共享变量、共享资源(以下统称为共享数据)。 那么一种保障线程安全的方法是将多个线程对共享数据的并发访问转换为串行访问,即一个共享数据一次 只能被一个线程访问,该线程访问结束后其他线程才能对其进行访问。锁(Lock)就是利用这种思路以保障 线程安全的线程同步机制。

    2021/07/29 concurrent

  10. Java并发 - volatile 实现原理

    在多线程并发编程中 synchronized 和 volatile 都扮演着重要的角色,volatile 是轻量级的 synchronized,它在多处理器开发中保证了共享变量的”可见性”。可见性的意思是当一个线程修改一个 共享变量时,另外一个线程能读到这个修改的值。如果 volatile 变量修饰符使用恰当的话,它比 synchronized 的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。但是,volatile 不能保证原子性。

    2021/07/29 concurrent