
多线程
anthony4515
一步一个脚印
展开
-
Java线程池详解
1、线程池的优势(1)、降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗;(2)、提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行;(3)方便线程并发数的管控。因为线程若是无限制的创建,可能会导致内存占用过多而产生OOM,并且会造成cpu过度切换(cpu切换线程是有时间成本的(需要保持当前执行线程的现场,并恢复要执行线程的现场))。(4)提供更强大的功能,延时定时线程池。2、线程池的主要参数public ThreadPoo.原创 2020-11-13 09:52:35 · 101 阅读 · 0 评论 -
Java中的并发队列
从有界无界上分常见的有界队列为ArrayBlockingQueue 基于数组实现的阻塞队列 LinkedBlockingQueue 其实也是有界队列,但是不设置大小时就时Integer.MAX_VALUE,内部是基于链表实现的 ArrayBlockingQueue 与 LinkedBlockingQueue 对比一哈 ArrayBlockingQueue 实现简单,表现稳定,添加和删除使用同一个锁,通常性能不如后者 LinkedBlockingQueue 添加和删除两把锁是分开的,所以竞..转载 2020-09-04 16:56:10 · 233 阅读 · 0 评论 -
独占锁与共享锁
前言独占锁和共享锁同样是一种概念。我们先介绍一下具体的概念,然后通过 ReentrantLock 和 ReentrantReadWriteLock 的源码来介绍独占锁和共享锁。概念引入独占锁概念独占锁也叫排他锁,是指该锁一次只能被一个线程所持有。如果线程T对数据A加上排他锁后,则其他线程不能再对A加任何类型的锁。获得排它锁的线程即能读数据又能修改数据。JDK中的synchronized和 JUC中Lock的实现类就是互斥锁。共享锁概念共享锁是指该锁可被多个线程所持有。如果线程T对数据转载 2020-09-02 17:28:05 · 994 阅读 · 0 评论 -
synchronized四种锁状态的升级
synchronized四种锁状态的升级一、背景在 Java 语言中,使用 Synchronized 是能够实现线程同步的,即加锁。并且实现的是悲观锁,在操作同步资源的时候直接先加锁。加锁可以使一段代码在同一时间只有一个线程可以访问,在增加安全性的同时,牺牲掉的是程序的执行性能,所以为了在一定程度上减少获得锁和释放锁带来的性能消耗,在 jdk6 之后便引入了“偏向锁”和“轻量级锁”,所以总共有4种锁状态,级别由低到高依次为:无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态。这几个状态会随着竞争情转载 2020-09-02 17:08:19 · 253 阅读 · 0 评论 -
JMM内存模型
概述JMM,全名为Java Memory Model,即Java内存模型。它是一组规范,需要各个JVM的实现来遵守JMM规范,它屏蔽了各种硬件和操作系统的内存访问差异,以实现Java程序在各个平台下都能达到一致的内存访问效果。不像C/C++那样直接访问物理硬件和操作系统的内存模型,它的主要目的是解决由于多线程通过共享内存进行通信时,存在的本地内存数据不一致、编译器会对代码重排序、处理器会对代码乱序执行等带来的问题。可以保证并发编程场景中的原子性、可见性和有序性。它有利于开发者可以利用这些规范,更方便转载 2020-08-14 17:30:29 · 297 阅读 · 0 评论 -
ReentrantLock可重入锁
ReentantLock 继承接口 Lock 并实现了接口中定义的方法,他是一种可重入锁,除了能完成 synchronized 所能完成的所有工作外,还提供了诸如可响应中断锁、可轮询锁请求、定时锁等避免多线程死锁的方法。Lock 接口的主要方法1. void lock(): 执行此方法时, 如果锁处于空闲状态, 当前线程将获取到锁. 相反, 如果锁已经被其他线程持有, 将禁用当前线程, 直到当前线程获取到锁.2. boolean tryLock():如果锁可用, 则获取锁, 并立即返回 true, 否转载 2020-08-14 17:29:15 · 152 阅读 · 0 评论