Java并发基础
文章平均质量分 80
溪午闻璐
合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下
展开
-
Java并发基础:Monitor概念
一、Java对象头 由于Java面向对象的思想,在JVM中需要大量存储对象,存储时为了实现一些额外的功能,需要在对象中添加一些标记字段用于增强对象功能,这些标记字段组成了对象头。对象头包含两部分:运行时元数据(Mark Word)和类型指针(Klass Word)以32位虚拟机为例:普通对象:数组对象:数组对象还需要记录数组长度其中,运行时元数据Mark Word结构为:哈希值(HashCode),可以看作是堆中对象的地址 GC分代年龄(年龄计数器) ...原创 2022-03-04 21:03:03 · 3506 阅读 · 2 评论 -
Java并发基础:变量的线程安全
一、变量的线程安全分析成员变量和静态变量是否线程安全? 如果它们没有共享,则线程安全 如果它们被共享了,根据它们的状态是否能够改变,又分两种情况: 如果只有读操作,则线程安全 如果有读写操作,则这段代码是临界区,需要考虑线程安全局部变量是否线程安全?局部变量是线程安全的 但局部变量引用的对象则未必 如果该对象没有逃离方法的作用访问,它是线程安全的 如果该对象逃离(return)方法的作用范围...原创 2022-01-22 12:27:28 · 2690 阅读 · 0 评论 -
Java并发基础:线程八锁
情况1:class Number{ public synchronized void a() { log.debug("1"); } public synchronized void b() { log.debug("2"); }} public static void main(String[] args) { Number n1 = new Number(); new Thread(()->{ n1.a()原创 2022-01-22 10:40:20 · 282 阅读 · 0 评论 -
Java并发基础:共享资源存在的问题
一、共享资源带来的问题 CPU分时操作,原创 2022-01-21 17:09:59 · 732 阅读 · 0 评论 -
Java并发基础:模式之两阶段终止
一、两阶段终止模式(Two Phase Termination) 在一个线程 T1 中如何“优雅”终止线程 T2?这里的【优雅】指的是给 T2 一个料理后事的机会。1.1 错误思路使用线程对象的stop()方法停止线程。stop 方法会真正杀死线程,如果这时线程锁住了共享资源,那么当它被杀死后就再也没有机会释放锁,其它线程将永远无法获取锁。使用 System.exit(int) 方法停止线程目的仅是停止一个线程,但这种做法会让整个程序都停止。1.2 两阶段终止模式...原创 2022-01-20 10:47:10 · 293 阅读 · 0 评论 -
Java并发基础:线程
一、线程的创建及使用使用线程时一般分为两步,即,第一步创建线程,第二步启动线程。以下是几种不同的线程创建方法:方法一:直接使用Thread 直接使用Thread,采用匿名内部类的方式实现。public class App { public static void main( String[] args ) throws IOException { //创建线程 Thread t = new Thread("t1"){ ...原创 2022-01-19 11:30:13 · 95 阅读 · 0 评论 -
Java并发基础:基础概念
一、进程与线程进程程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的。 当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。 进程就可以视为程序的一个实例。大部分程序可以同时运行多个实例进程(例如记事本、画图、浏览器等),也有的程序只能启动一个实例进程(例如网易云音乐、360 安全卫士等)如下图,打开任务管理器,就可以看到电脑运行的一个个进原创 2022-01-14 15:40:56 · 81 阅读 · 0 评论