多线程
文章平均质量分 78
多线程的相关知识
会飞的皮卡丘EI
这个作者很懒,什么都没留下…
展开
-
线程的同步方式
线程的同步方式一、什么是线程同步每一个服务进程的运行,都包含若干进程(Thread),线程是调度的基本单位,进程则是资源拥有的基本单位。线程同步:即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作,而其他线程又处于等待状态。二、为什么需要同步线程有自己的私有数据,比如栈和寄存器,同时与其它线程共享相同的虚拟内存和全局变量等资源,当多个线程同时读写同一份共享资源的时候,会引起冲突,这时候就需要引入线程同步机制使各个线程排队原创 2020-10-20 21:26:11 · 314 阅读 · 0 评论 -
死锁
死锁一、什么是死锁百度百科:死锁是指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。二、产生死锁的条件四个条件必须同时满足:A、互斥使用:一个资源被一个线程使用时,另一个线程不可以使用B、不可抢占:资源的请求者不能强行从资源占有者手里夺走资源C、占有等待:当资源请求者请求其他资源的同时,保持对象有资源的占有D、循环等待:线程1 等待 线程原创 2020-10-15 14:21:06 · 434 阅读 · 0 评论 -
B树和B+树
B树和B+树一、为什么需要B树B树和二叉树、红黑树相比较,子树更多也就是路数越多,子树越多表示数的高度越低,搜索效率越高。二、什么是B树一种平衡的多叉树,称为B树 。一棵m阶的B树的满足条件:对于M-树:最多允许有M个孩子,意思就是最多有 M-1 个 key节点中 key 必须按序存储(任何搜索树中都不允许 key 重复,所以永远不会出现 key 相等情况)性质:B-树,一个节点最多只能有 M 个孩子,最多只能有 (M-1)个 key除了根之外的节点,至少(M - 1)/ 2原创 2020-10-09 23:40:05 · 891 阅读 · 1 评论 -
聊聊Synchronized、原理以及优化
Synchronized关键字一、什么是Synchronizedsynchronized是Java中的关键字,是一种同步锁。二、为什么会出现Synchronized在并发编程中存在线程安全问题,主要原因有:1.存在共享数据 2.多线程共同操作共享数据。关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块,同时synchronized可以保证一个线程的变化可见(可见性),即可以代替volatil三、Synchronized怎么使用Java中每一个对象都可原创 2020-09-30 22:00:02 · 217 阅读 · 0 评论 -
聊聊ConcurrentHashMap
聊聊ConcurrentHashMap一、为什么需要ConcurrentHashMap1、HashMap 线程不安全在多线程环境下,使用HashMap进行 put 操作的时候可能造成死循环,导致 CPU 使用率太高为什么HashMap线程不安全?在 put 的时候,插入元素超过了容量,就会进行rehash,这个会重新将原数组的内容重新hash到新的扩容数组中,在多线程的环境下,存在同时其他的元素也在进行 put 操作,如果 hash 值相同,可能出现同时在同一数组下用链表表示,造成闭环,导致在原创 2020-09-27 14:25:50 · 1297 阅读 · 0 评论 -
面试题:进程和线程区别
进程和线程区别1、由来首先,先聊聊计算机中一个程序是怎么运行的?执行一段程序代码,实现一个功能的过程介绍 :当得到CPU的时候,相关的资源必须也已经就位,(就是显卡啊,GPS啊什么的必须就位),然后CPU开始执行。这里除了CPU以外所有的就构成了这个程序的执行环境,也就是我们所定义的程序上下文。当这个程序执行完了,或者分配给他的CPU执行时间用完了,那它就要被切换出去,等待下一次CPU的临...原创 2020-04-02 13:34:05 · 288 阅读 · 0 评论 -
线程池
线程池一、为什么需要线程池优点:降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁带来的消耗。提⾼响应速度:当任务到达时,任务可以不需要等待线程创建就能⽴即执⾏。提⾼线程的可管理性:使⽤线程池可以统一进行线程分配、调度和监控。二、创建线程池的两种方式1、Executors第一种Executors: 具体的4种常用的线程池实现如下:(返回值都是ExecutorService...原创 2020-03-28 22:46:01 · 212 阅读 · 0 评论 -
Semaphore
Semaphore一、什么是SemaphoreSemaphore 是 synchronized 的加强版,作用是控制线程的并发数量。Semaphore 是一种计数信号量,用于管理一组资源,内部是基于AQS的共享模式。它相当于给线程规定一个量,从而控制允许活动的线程数。什么是AQS(抽象的同步器)基于CAS实现同步队列:无条件自旋,尝试添加/删除队列元素,失败就一直循环调用添加/删除操作...原创 2020-03-27 21:11:48 · 339 阅读 · 1 评论 -
AtomicInteger
AtomicInteger一、为什么需要 AtomicInteger由来:volatile 关键字可以保证多线程之间的可见性,但是不能保证原子操作。 所以就引入了AtomicInteger类概念:AtomicInteger是一个提供原子操作的Integer类,通过线程安全的方式操作加减作用: AtomicInteger提供原子操作来进行Integer的使用,因此十分适合高并发情况下使用。 ...原创 2020-03-27 21:10:54 · 872 阅读 · 0 评论 -
CountDownLatch
CountDownLatch一、什么是 CountDownLatchCountDownLatch是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥)。CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减1。当计数器的...原创 2020-03-27 20:58:50 · 296 阅读 · 0 评论 -
synchronized底层原理
synchronized底层原理常见三种使用方法:1)普通同步方法,锁是当前实例; 2)静态同步方法,锁是当前类的Class实例,Class数据存在永久代中,是该类的一个全局锁; 3)对于同步代码块,锁是synchronized括号里配置的对象。1、对象锁机制(monitor):先看一段代码:public class Test{ private static Ob...原创 2020-03-26 14:14:36 · 200 阅读 · 0 评论 -
多线程(线程的创建以及常用方法)
多线程基础一、基本概念进程是执行程序的依次执行过程,它是一个动态的概念。是系统资源分配的单位。一个进程中可以包含多个线程。线程是CPU调度和执行的单位。多线程是指有多个CPU,即多核。二、线程的创建常见线程有三种方式:继承Thread类、实现Runnable接口、实现Callable接口1、继承Thread类步骤:自定义线程类继承Thread类重写run()方法,编写线程执行...原创 2020-03-25 23:14:14 · 242 阅读 · 0 评论