![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程与高并发
文章平均质量分 83
!春明!
人生如逆旅,我亦是行人。
展开
-
引用类型导致的线程安全问题
一、问题 多线程操作共享变量,共享变量为引用类型,出现引用类型值出现改变的问题。二、基本数据类型和引用数据类型在内存中的对比 对比 基本数据类型 引用数据类型 存储地址 在栈中进行分配 在堆中进行分配,堆的读写速度远不及栈 指针指向 变量名指向具体的数值 变量名指向存数据对象的内存地址,即变量名指向hash值 初始化 变量在声明之后java就会立刻分配给他内存空间 它以特殊的方式(类似C指针)指向对...原创 2021-12-25 22:36:17 · 2416 阅读 · 0 评论 -
java安全性容器
一、容器· 在进行安全性容器的认识之前,先了解一下java中常见的几种容器。java中的容器在物理上可以分为俩种:Collection和Map。区别就是在存储时按对存储还是单值存储。以下是画的简略图:...原创 2021-11-01 23:19:38 · 253 阅读 · 0 评论 -
Java四种引用类型:强引用、软引用、弱引用、虚引用
Java中的四种引用Java中有四种引用类型:强引用、软引用、弱引用、虚引用。Java为什么要设计这四种引用Java的内存分配和内存回收,都不需要程序员负责,都是由伟大的JVM去负责,一个对象是否可以被回收,主要看是否有引用指向此对象,说的专业点,叫可达性分析。Java设计这四种引用的主要目的有两个: 可以让程序员通过代码的方式来决定某个对象的生命周期; 有利用垃圾回收。 强引用强引用是最普遍的一种引用,我们写的代码,99.9999%都是强引用:Objecto.原创 2021-10-24 21:44:45 · 734 阅读 · 0 评论 -
AQS解析
Java并发包下很多API都是基于AQS来实现的加锁和释放锁等功能的,AQS是java并发包的基础类。比如:ReentrantLock、ReentrantReadWriteLock底层都是基于AQS来实现的。一、简介AQS全名:AbstractQueuedSynchronizer,顾名思义就是抽象的队列式同步器,是除了java自带的synchronized关键字之外的锁机制,是并发容器下locks包内的一个类。它实现了一个FIFO(FirstIn、FisrtOut先进...原创 2021-10-18 23:12:11 · 347 阅读 · 0 评论 -
多线程的简单练习
通过简单的练习题复习之前学习的关于多线程的知识。后期一直补充。一、线程监控1、实现一个容器,提供两个方法,add,size方法。写两个线程,线程1添加10个元素到容器中,线程2实现监控元素的个数,当个数到5个时,线程2给出提示并结束/** * 先来一个比较麻烦的,通过双重的wait来实现线程之间的通信。 * * 给lists添加volatile之后,t2能够接到通知,但是volatile只会保证list的指向,不会保证内容的可见性。 * * 这里使用wait和n...原创 2021-09-30 16:12:12 · 269 阅读 · 0 评论 -
Java 并发工具包(concurrent)详解
一、concurrent并发包 在JDK1.5之前,Java中要进行业务并发时,不管什么情况下,都需要由程序员独立完成代码实现,此时在进行一些并发设计时需要考虑性能、死锁、公平性、资源管理以及如何避免线程安全性方面带来的危害等,往往会采用一些较为复杂的安全策略,加重了程序员的开发负担。.在JDK1.5出现之后,java.util.concurrent工具包作为简化并发出现。concurrent提供了多种并发模型使我们在相应的情况下大大减少了开发的负担。下面对其中常见实现类进行讲解。...原创 2021-09-15 23:06:41 · 9436 阅读 · 1 评论 -
CAS机制以及AtomicXXX和Unsafe的实现
概述 在多线程开发中保证线程安全至关重要,在JDK 5之前Java语言是靠synchronized(调整到具体解析)关键字保证同步的,通过上锁来实现安全必然会影响整体的性能(加锁、释放锁会导致比较多的上下文切换和调度延时,同时一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险)。 volatile也是不错的保护机制,但是volatile不能保证原子性,对一些复合操作来说还是存在问题。因此对于同步最终还是要回到锁机制上来。syn...原创 2021-09-08 23:30:23 · 1176 阅读 · 0 评论 -
volatile(信号量)原理与应用解析
volatile是Java提供的一种轻量级的同步机制(可以理解为轻量级锁)。Java 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量,相比于synchronized,volatile更轻量级,因为它不会引起线程上下文的切换和调度。但是volatile 变量的同步性较差,无法保证操作的原子性。一、volatile原理volatile可以保证线程可见性且提供了一定的有序性,但是无法保证原子性。在JVM底层volatile是采用“内存屏障”来实现的。...原创 2021-08-31 23:54:09 · 411 阅读 · 0 评论 -
synchronized从入门到精通
一、synchronized的作用线程安全是并发编程中的重要关注点,应该注意到的是,造成线程安全问题的主要诱因有两点,一是存在共享数据(也称临界资源),二是存在多条线程共同操作共享数据。因此为了解决这个问题,我们可能需要这样一个方案,当存在多个线程操作共享数据时,需要保证同一时刻有且只有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后再进行,这种方式有个高尚的名称叫互斥锁,即能达到互斥访问目的的锁,也就是说当一个共享数据被当前正在访问的线程加上互斥锁后,在同一个时刻,其他线程只能处于等待的状态原创 2021-08-24 22:30:03 · 1672 阅读 · 0 评论 -
多线程的基本概念
目录一、进程、线程和纤程二、多线程的实现方法三、start和run方法的区别四、线程的状态五、sleep、wait、yield、join 六、多线程的三大特性一、进程、线程和纤程进程:比如我们下载QQ之后电脑上会有一个QQ.exe程序,双击打开它登录进去,这个时候就是一个进程。即操作系统分配内存资源的最小单位。线程:一个程序里面不同的执行路径叫做一个线行。即CPU最小执行单元(内核空间)。其中线程与线程之间是不可见的。...原创 2021-08-17 23:37:52 · 518 阅读 · 0 评论