【Java 多线程并发】 锁
【Java 多线程并发】 锁Metadatatitle: 【Java 多线程并发】 锁
date: 2023-07-03 15:36
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java/多线程并发
categories:
- Java
keywords:
- Java/多线程并发
description: 【Java 多线程并发】 锁
概述相关结论
对于普通同步方法,锁的是当前实例对象,通常指this,所有的同步方法用的都是同一把锁—>实例对象本身
对于静态同步方法,锁的是当前类的Class对象
对于同步方法块,锁的是synchronized括号内的对象
悲观锁
认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改
乐观锁
认为自己在使用数据的时候不会有别的线程修改数据或资源,不会添加锁,Java中使用无锁编程来实现,只是在更新的时候去判断,之前有没有别的线程更新了这个数据,如果这 ...
【Java 多线程并发】 volatile
【Java 多线程并发】 volatileMetadatatitle: 【Java 多线程并发】 volatile
date: 2023-07-03 14:46
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java/多线程并发
categories:
- Java
keywords:
- Java/多线程并发
description: 【Java 多线程并发】 volatile
概述volatile的原理
抽象上是 Load 屏障 和 Store 屏障
volatile实现是靠lock指令(汇编语言的LOCK指令) + 缓存一致性协议JVM会向处理器发送一条Lock前缀的指令,将这个变量所在缓存行的数据写会到系统内存
可见性
JVM会向处理器发送一条lock前缀的指令,将这个缓存中的变量回写到系统主存中。
每个处理会通过嗅探在总线上传播的数据来检查自己的缓存是否过期
有序性
Lock前缀指令实际上相当于一个内存屏障(也成内存栅栏)
执行到内 ...
【Java 多线程并发】 Java内存模型基础知识
【Java 多线程并发】 Java内存模型基础知识Metadatatitle: 【Java 多线程并发】 Java内存模型基础知识
date: 2023-07-03 13:55
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java/多线程并发
categories:
- Java
keywords:
- Java/多线程并发
description: 【Java 多线程并发】 Java内存模型基础知识
概述有两种并发模型可以解决这两个问题:
消息传递并发模型
共享内存并发模型
JMMJMM(Java内存模型Java Memory Model)本身是一种抽象的概念
JMM 的组成
主内存:共享的信息,也就是图中的内存区域,它也就对应着JVM内存区域中的堆
工作内存:私有信息,也就是图中的工作空间,基本数据类型,直接分配到工作内存,引用的地址存放在工作内存,引用的对象存放在堆中。局部变量,主内存数据的副本都会被存到工作内存。它对应JVM中的J ...
【Java 多线程并发】 Java线程间的通信
【Java 多线程并发】 Java线程间的通信Metadatatitle: 【Java 多线程并发】 Java线程间的通信
date: 2023-07-03 13:25
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java/多线程并发
categories:
- Java
keywords:
- Java/多线程并发
description: 【Java 多线程并发】 Java线程间的通信
【Java 多线程并发】 Java线程间的通信合理的使用Java多线程可以更好地利用服务器资源。一般来讲,线程内部有自己私有的线程上下文,互不干扰。但是当我们需要多个线程之间相互协作的时候,就需要我们掌握Java线程的通信方式。本文将介绍Java线程之间的几种通信原理。
锁与同步在Java中,锁的概念都是基于对象的,所以我们又经常称它为对象锁。线程和锁的关系,我们可以用婚姻关系来理解。一个锁同一时间只能被一个线程持有。也就是说,一个锁如果和一个线程“结婚”(持 ...
【Java 多线程并发】 Runnable
【Java 多线程并发】 RunnableMetadatatitle: 【Java 多线程并发】 Runnable
date: 2023-07-03 10:17
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java
categories:
- Java
keywords:
- Java
description: Runnable接口是Java中用于表示可执行任务的接口,通过实现该接口并实现run()方法,可以在单独的线程中执行代码逻辑。它是多线程编程中常用的一种方式,可以提高代码的灵活性和可维护性。
概述Runnable是Java中的一个接口,位于java.lang包中。它是一个函数式接口,用于表示可以被线程执行的任务。
【Java 多线程并发】 RunnableRunnable是Java中的一个接口,位于java.lang包中。它是一个函数式接口,用于表示可以被线程执行的任务。实现了Runnable接口的类可以在单独的线程中执行代码逻辑,而不需 ...
【Java 多线程并发】 Thread
【Java 多线程并发】 ThreadMetadatatitle: 【Java 多线程并发】 Thread
date: 2023-07-03 09:54
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java
categories:
- Java
keywords:
- Java
description: Thread类是Java多线程编程的核心类,通过它可以创建和管理线程,实现多任务并发执行。合理使用Thread类可以提高程序的性能和效率,但也需要注意线程安全问题。
概述Thread类是Java中用于创建和管理线程的类。
Thread类的继承关系
Thread 数据结构
//当前线程的名称
private volatile String name;
//线程的优先级
private int priority;
private Thread threadQ;
private long eetop;
//当前线程是否是单步线程 ...
【Java 多线程并发】 Java线程的状态及主要转化方法
【Java 多线程并发】 Java线程的状态及主要转化方法Metadatatitle: 【Java 多线程并发】 Java线程的状态及主要转化方法
date: 2023-07-03 09:42
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java/多线程并发
categories:
- Java
keywords:
- Java/多线程并发
description: 【Java 多线程并发】 Java线程的状态及主要转化方法
操作系统中的线程状态转换首先我们来看看操作系统中的线程状态转换。
在现在的操作系统中,线程是被视为轻量级进程的,所以操作系统线程的状态其实和操作系统进程的状态是一致的。
操作系统线程主要有以下三个状态:
就绪状态(ready):线程正在等待使用CPU,经调度程序调用之后可进入running状态。
执行状态(running):线程正在使用CPU。
等待状态(waiting): 线程经过等待事件的调用或者正在等待其他资源 ...
【Java 多线程并发】 线程组和线程优先级
【Java 多线程并发】 线程组和线程优先级Metadatatitle: 【Java 多线程并发】 线程组和线程优先级
date: 2023-07-03 09:19
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java/多线程并发
categories:
- Java
keywords:
- Java/多线程并发
description: 【Java 多线程并发】 线程组和线程优先级
概述线程组(ThreadGroup)
线程组是一个树状的结构,每个线程组下面可以有多个线程或者线程组。线程组可以起到统一控制线程的优先级和检查线程的权限的作用。
线程的优先级Java中线程优先级可以指定,范围是1~10。
线程组的数据结构
public class ThreadGroup implements Thread.UncaughtExceptionHandler {
private final ThreadGroup parent; // 父亲Th ...
【Java 多线程并发】 Java多线程入门类和接口
【Java 多线程并发】 Java多线程入门类和接口Metadatatitle: 【Java 多线程并发】 Java多线程入门类和接口
date: 2023-07-03 08:57
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java
categories:
- Java
keywords:
- Java/多线程并发
description: 【Java 多线程并发】 Java多线程入门类和接口
概述Thread类的几个常用方法
currentThread():静态方法,返回对当前正在执行的线程对象的引用;
start():开始执行线程的方法,java虚拟机会调用线程内的run()方法;
yield():yield在英语里有放弃的意思,同样,这里的yield()指的是当前线程愿意让出对当前处理器的占用。这里需要注意的是,就算当前线程调用了yield()方法,程序在调度的时候,也还有可能继续运行这个线程的;
sleep():静态方法,使当前线程睡 ...
【Java 多线程并发】 进程与线程基本概念
【Java 多线程并发】 进程与线程基本概念Metadatatitle: 【Java 多线程并发】 进程与线程基本概念
date: 2023-07-03 08:50
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java/多线程并发
categories:
- Java
keywords:
- Java/多线程并发
description: 【Java 多线程并发】 进程与线程基本概念
概述进程和线程的区别
本质的区别是是否单独占有内存地址空间及其它系统资源(比如I/O)进程是操作系统进行资源分配的基本单位,而线程是操作系统进行调度的基本单位,即CPU分配时间的单位 。
上下文切换
指 CPU 从一个进程(或线程)切换到另一个进程(或线程)。上下文是指==某一时间点 CPU 寄存器和程序计数器的内容==。
进程产生的背景批处理操作系统
批处理操作系统的指令运行方式仍然是串行的,内存中始终只有一个程序在运行批处理操作效率也不高
进程的提出
进程就是应 ...