随笔分类 - 并发编程
摘要:interrupt(): 打断 sleep、wait、join 的线程会抛出 InterruptedException 异常并清除打断标记,如果打断正在运行的线程、park 的线程则会重新设置打断标记isInterrupted(): 不会清除打断标记interrupted(): 会清除打断标记 一、
阅读全文
摘要:案例代码 @Slf4j public class JoinDemo { public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread(() -> { log.info("{} 线
阅读全文
摘要:Java 中的变量主要分为静态变量、普通成员变量、局部变量等,这些变量在单线程环境下是不会有线程安全问题的,但是多线程环境下实际情况又是什么样子的呢? 1、成员变量和静态变量 如果成员变量和静态变量不存在多个线程共享操作,那么不会有线程安全问题 如果成员变量和静态变量被多个线程共享,多个线程对共享变
阅读全文
摘要:引用周志明老师在<深入理解 Java 虚拟机>中的一段话 在 Java 语言里面一个对象如果计算了哈希码,就应该一直保持该值不变(强烈建议但不强制,因为用户可以重载 hashCode() 方法按自己的意愿返回哈希码),否则很多依赖对象哈希码的 API 都可能存在出错的风险.而作为绝大多数对象哈希码来
阅读全文
摘要:一、概述 并发三大特性即 可见性、原子性、有序性 可见性: 一个线程修改了共享变量的值,另外一个线程应该立即得到共享变量的最新值 原子性: 一个或多个操作要么全部执行,并且在执行的过程中不会被其它因素打断,要么全部不执行 有序性: 为了提高程序运行效率,Java 在编译和运行时会对指令进行重排序,重
阅读全文
摘要:参考: https://blog.csdn.net/qq_38505969/article/details/123446310 1、下载源码并进行方法扩展 2、pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="
阅读全文
摘要:一、概述 在 Hotspot 虚拟机中,对象的内存布局主要由 3 部分组成1、对象头(Header): 包括对象的运行时状态信息 Mark Word、Klass Pointer(类型指针,直接指针访问方式)、Array Length(如果是数组对象,才会有此特殊内存区域)2、实例数据(Instanc
阅读全文
摘要:一、案例 在介绍 CAS 之前先看一段代码 /** * @Author summer * @Description * @CreateDate 2023-04-13 15:58 */ @Slf4j public class VolatileDemo { // 定义 volatile 变量保证可见性、
阅读全文
摘要:一、概述 在实际开发中经常会碰到需要写双层 for 循环的场景,那么这个时候就有一个问题了,在不影响结果的前提下,双层循环是大循环写在外面好还是小循环写在外面好呢,针对这个问题我们来简单的探究一下 二、案例代码 代码 1、双层循环时把小循环写在外面 @Slf4j public class Demo
阅读全文
摘要:案例代码一 @Slf4j public class Client { public static void main(String[] args) { MyThread myThread = new MyThread(); myThread.start(); } } class MyThread e
阅读全文
摘要:案例代码 @Slf4j public class Client { public static void main(String[] args) { Thread t1 = new Thread("t1") { @Override public void run() { log.info("t1 s
阅读全文
摘要:一、概述 程序: 存放在磁盘中的可执行文件,对于计算机来说它就是一系列的指令集合,是一个静态概念 进程: 程序的一次执行过程,是一个动态的概念,进程由进程控制块、程序段、数据段组成,它是操作系统进行资源分配的最小单位 程序控制块(PCB: Process Control Block) 进程描述信息:
阅读全文
摘要:默认情况下,Java 进程需要等待所有的线程都运行完毕,才会结束,但是有一种特殊的线程叫做守护线程,当其它非守护线程运行完毕之后,它才会结束,即使守护线程有代码没有执行完,也会强制结束 示例一 @Slf4j public class ThreadDemo { public static void m
阅读全文
摘要:1、找出被占用端口对应的进程 id (pid) netstat -ano | findstr 8279 2、使用 task 命令杀死该进程 taskkill /f /pid 43392 3、如果不清楚 taskkill 命令相关的参数,可以使用如下命令进行查看 taskkill /?
阅读全文