![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
高并发多线程
文章平均质量分 54
柿饼zzzz
这个作者很懒,什么都没留下…
展开
-
杂谈:内核同步的机制
内核同步的机制一、关于同步理论的一些基本概念二、内核同步的常用方法(保证原子性、有序性、可见性)三级目一、关于同步理论的一些基本概念临界区:访问或操作共享数据的代码段,比如synchronize大括号中的部分竞争条件:两个线程同时拥有临界区的执行权数据不一致:data unconsistency 由竞争条件引起的数据破坏同步:避免 race conditions锁:完成同步的手段,上锁解锁必须具备原子性原子性:要么全部发生,要么不发生,像原子一样不可分割有序性:禁止指令重排序可见性:一个原创 2021-06-16 22:01:17 · 137 阅读 · 0 评论 -
杂谈:内存管理
内存管理1、内存管理的发展历程1、内存管理的发展历程 DOS时代 —— 同一时间只能有一个进程运行(也有一些特殊的算法可以支持多进程) Windows9x —— 多个进程装入内存。存在问题 :1、内存不够用 2、相互打扰 为了解决这两个问题,诞生了现在的内存管理系统:(虚拟地址、分页装入、软硬结合寻址)1、分页(解决内存不够用) 内存中分成固定大小的页框(4K),把 程序分成固定大小的快,用到哪一块,加载哪一块。加载过程中,如果内存已经满了,会把最不长用到的一块放到swap分区,把最新的原创 2021-06-13 14:13:42 · 155 阅读 · 1 评论 -
杂谈:进程、线程、纤程
进程、线程、纤程进程和线程有什么区别?线程的实现linux中的实现:其他操作系统:纤程进程调度调度的方式进程调度的基本概念其他概念僵尸进程:孤儿进程:进程和线程有什么区别? 进程是一个程序运行起来的状态,线程是一个进程中的不同执行路径。 专业角度:进程是操作系统分配资源的基本单位,线程是执行调度的基本单位(线程共享进程的内存空间,不会分配自己独立的内存空间)线程的实现linux中的实现:就是一个普通的进程,只不过和其他进程共享资源(内存空间、全局数据等)。其他操作系统:纤程 纤程:原创 2021-06-13 12:48:38 · 167 阅读 · 0 评论 -
08、线程池
一、优点降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗;提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行;方便线程并发数的管控。因为线程若是无限制的创建,可能会导致内存占用过多而产生OOM,并且会造成cpu过度切换(cpu切换线程是有时间成本的(需要保持当前执行线程的现场,并恢复要执行线程的现场))。延时定时线程池,可以支持定时任务。二、线程池的运行策略线程池流程判断核心线程池是否已满,没满则创建一个新的工作线程来执行任务。转载 2021-03-15 19:51:06 · 109 阅读 · 0 评论 -
00、java多线程高并发知识图谱
原创 2021-03-11 11:02:43 · 106 阅读 · 0 评论 -
07、容器
一、数据结构分类物理结构:数组链表逻辑结构:由数组跟链表组成的8种数据结构(数组、队列、链表、散列表、栈、树、图)java的数据结构如下,其中Queue为后面加入,专为高并发设计二、多线程环境下容器衍化的过程Map角度:Hashtable是jdk1.0遗留下来的产物,所有方法都带了synchronize,采用的this锁。目前很少使用HashMap和SynchronizedHashMapMap<UUID, UUID> m = Collections.synchro原创 2021-03-01 23:01:26 · 155 阅读 · 6 评论 -
06、java中的引用(强、软、弱、虚)
1、java中的引用强、软、弱、虚(1)、强引用M m = new M();是强引用,调用GC时,对象不会被回收(2)、软引用原创 2021-03-01 11:26:23 · 74 阅读 · 1 评论 -
05、ThreadLocal
1、概述2、注意内存泄露问题2、使用spring 声明式事物,保证同一个Connection3、源码set方法:是set到Thread.currentThread.map(ThreadLocal,Value)设置到了当前线程的map中原创 2021-03-01 10:55:55 · 56 阅读 · 0 评论 -
04、AQS
1、概述2、使用3、源码JDK9新引入了VarHandle实现VarHandle的操作可以保证原子性,有cpu原语的支持转载 2021-03-01 10:02:27 · 89 阅读 · 0 评论 -
03、生产者消费者问题
1、问题写一个固定容量同步容器,拥有put和get方法,以及getCount方法,能够支持2个生产者线程以及10个消费者线程的阻塞调用2、解决方案object.wait()+object.notify()解决 final private LinkedList<T> lists = new LinkedList<>(); final private int MAX = 10; //最多10个元素 private int count = 0; public sync原创 2021-02-26 11:24:49 · 59 阅读 · 0 评论 -
02、多线程之间执行流程的控制
1、概述谈到多线程编程,在工作中往往会遇到线程之间执行的流程控制问题。我将通过如下问题来讲解线程之间流程控制的方式。2、问题有一个容器,一个线程不断往里面装元素,另一个线程负责检测容器中的个数,当容器中元素的个数刚好为5时,第二个线程退出。3、解决方案使用object.wait()+object.notify()解决 List lists = new ArrayList(); public void add(Object o) { lists.add(o); } public原创 2021-02-26 10:49:25 · 132 阅读 · 0 评论 -
01、多线程基础
01、进程、线程的概念进程是程序运行的最小单位 线程由多个进程组成 线程是一条程序的执行路径02、启动线程的三种方式继承Thread类 实现Runable接口 通过线程池获取线程Executors.newCachedThread()03、线程的基本方法Thread.sleep(500) 睡眠500ms,不会释放lock,不依赖于同步器synchronized,sleep不需要被唤醒 Object.wait() 释放锁,而且会加入等待队列,需要依赖synchroniz...原创 2021-02-24 23:02:03 · 65 阅读 · 0 评论