
juc并发
文章平均质量分 92
Alphr
这个作者很懒,什么都没留下…
展开
-
ConcurrentHashMap和HashMap,HashTable的区别
文章目录1.为什么要使用ConcurrentHashMap1.为什么要使用ConcurrentHashMap由于HashMap的线程不安全:HashMap多线程死循环问题,在多线程环境下并不会使用HashMap,虽然HashTable是线程安全的,但是它的类似put,get方法都是Synchronized修饰的,并发效率十分低下,在这个时候就需要用到ConcurrentHashMap来解决并发条件下HashTable效率低下的问题了ConcurrentHashMap在jdk1.7和jdk1.8中的不同原创 2020-06-21 21:35:49 · 367 阅读 · 0 评论 -
单核cpu多核cpu如何执行多线程
花了很多时间来整理这方面的相关内容程序和进程程序: 为完成特定任务,用某种语言编写的一组指令集合,即一段静态的代码进程: 是程序的一次执行过程,或是正在运行的一个程序,是一个动态的过程,比如电脑上的各种运行中的软件进程和线程进程可进一步细化为线程,是一个程序内部的一条执行路径,比如杀毒软件中的体检,杀毒,清理等都是一个进程中的多个线程一个进程同一时间并行多个线程,多线程是程序有多...原创 2020-03-31 11:19:00 · 8751 阅读 · 0 评论 -
深入剖析ThreadLocal线程局部变量
文章目录1.简介2.每个线程的变量副本是存储在哪里的3.通过源码分析ThreadLocal具体实怎样工作的3.1set方法3.2get方法4.变量副本【每个线程中保存的那个map中的变量】是怎么声明和初始化的5.不同的线程局部变量,比如说声明了n个(n>=2)这样的线程局部变量threadlocal,那么在Thread中的threadlocals中是怎么存储的呢?threadlocalmap中是怎么操作的?6.总结1.简介多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行原创 2020-05-21 22:38:13 · 490 阅读 · 0 评论 -
java并发-走近Callable和Future
1.Callable与Runnable类似,可以执行线程,与Runnable不同的是,它不是调用run方法,而是调用call方法,可以抛出异常,并且有返回值:public interface Callable<V> { V call() throws Exception;}返回值和参数类型保持一致我们搭建一个小的Demo来演示怎么使用callable接口public class callableTest { public static void main(Str原创 2020-05-21 21:26:39 · 171 阅读 · 0 评论 -
理解java并发中的线程池
文章目录1.线程池的出现1.线程池的出现任何程序的运行和都与要耗费资源,因为程序是在操作系统上运行的,涉及到与操作系统的交互,比如我们常用的数据库连接池,没有使用池化技术之前,每一个链接的创建和关闭都需要耗费资源,现在运用池化技术,将链接的创建关闭交给池统一处理,就可以达到节约资源,减少系统消耗的目的,类似数据库连接池,线程也有自己的线程池一个线程池中包含许多准备运行的空闲线程,将Runnable对象交给线程池,当使用线程池时,就会调用其中的线程,执行run方法,当run方法执行完毕,线程不会死亡,而原创 2020-05-21 20:46:22 · 536 阅读 · 0 评论 -
生产者消费者模型实现方式:管程法,信号灯法
管程法生产者:负责生产的数据模块消费者:负责处理数据的模块缓冲区:消费者不能直接从生产者获取产品,生产者生产进入缓冲区public class Demo { public static void main(String[] args) { container c = new container(); //生产者和消费者有一个共同点容器 ...原创 2020-04-03 11:55:34 · 523 阅读 · 0 评论 -
volatile内存解析
阅读本文需要熟悉java内存模型:Java内存模型-JMM解析文章目录1.前言2.volatile的出现及特性3.volatile读写与happens-before的关系4.volatile读写内存定义实现,避免指令重排1.前言java内存模型规定了所有的变量都存储主内存,注意这里的主内存,是依附在物理上的内存,jvm就运行在物理内存上(我的电脑是16G),所以这里的主内存就是虚拟机的一部分...原创 2020-04-28 17:57:49 · 355 阅读 · 0 评论 -
Java内存模型-JMM解析
1.前言在解析JMM之前,我们首先要明确,java并发编程说到底就是为了处理两个关键问题:线程之间通信线程之间同步我们先简要概述一下,在彻底了解了java内存模型之后,我们可以往更深层次进行探究,那么开始:线程通信指线程之间的信息交互,由于线程里的内容是线程私有的,所以必须通过一些手段达到信息交换的目的,这里有两种:共享内存和消息传递,其中共享内存会在本文重点介绍,并且也是java...原创 2020-04-27 22:41:16 · 327 阅读 · 0 评论 -
java并发工具类:CountdownLatch,CyclicBarrier,Semaphore
在jdk开发包java.util.concurrent中提供了几个非常有用的并发工具类:CountdownLatchCyclivcBarrierSemaphore接下来一一解释其特性和用法:1.CountdownLatch1.1介绍这是jdk文档的相关介绍,简而言之就是:CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信(而不...原创 2020-04-27 17:28:53 · 217 阅读 · 0 评论 -
JUC并发-CAS原子性操作和ABA问题及解决
在多线程条件下(A,B两个线程),假如i = 2,我们想通过i++的方式让 i 的值变为4,可能执行不成功,因为i++不是原子性操作,在底层不是表面上的i++一步完成,而是分成几步来操作,所以两个线程很可能拿到的值都是2,最终结果可能为3,所以在进行这种操作的时候,一般是 加锁来实现,但加锁会使效率低下,因此,从jdk5开始,java提供了java.util.concurrent.atomic包来...原创 2020-04-26 22:15:20 · 488 阅读 · 0 评论 -
Lock实现类-ReentrantLock原理
ReentrantLock原理原创 2020-04-26 20:55:34 · 222 阅读 · 0 评论 -
Synchronized 和 Lock 区别
SynchronizedSynchronized是java内置的关键字,可修饰同步代码块或同步方法,确保了多个线程在同一时刻只能有一个线程处于 同步代码块或同步方法中,它的优点是确保了线程安全,java许多类的许多方法都使用了Synchronized关键字,比如StringBuffer,但这个关键字有很多缺陷:如果一个代码块被synchronized修饰了,当一个线程获取了对应的锁,并执行该...原创 2020-04-26 18:10:50 · 172 阅读 · 0 评论