随笔分类 - 并发
摘要:在 Java 中,可以使用 synchronized 关键字来标记一个方法或者代码块,当某个线程调用该对象的synchronized方法或者访问synchronized代码块时,这个线程便获得了该对象的锁,其他线程暂时无法访问这个方法,只有等待这个方法执行完毕或者代码块执行完毕,这个线程才会释放该对
阅读全文
摘要:参考:https://blog.csdn.net/weixin_52962125/article/details/130556400?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefa
阅读全文
摘要:JMM是定义程序中变量的访问规则,线程对于变量的操作只能在自己的工作内存中进行,而不能直接对主内存操作.由于指令重排序,读写的顺序会被打乱,因此JMM需要提供原子性,可见性,有序性保证. 随着CPU和内存的发展速度差异的问题,导致CPU的速度远快于内存,所以现在的CPU加入了高速缓存,高速缓存一般可
阅读全文
摘要:synchronized和volatile区别个人理解JMM:Java Memory Model(Java内存模型),根据并发过程中如何处理、可见性、原子性和有序性这三个特性而建立的模型。可见性:JMM提供了volatile变量定义、final、synchronized块来保证可见性。原子性:个人理
阅读全文
摘要:1)核心参数 public ThreadPoolExecutor(int corePoolSize, // 核心线程数量大小int maximumPoolSize, // 线程池最大容纳线程数long keepAliveTime, // 线程空闲后的存活时长TimeUnit unit,//缓存异步任
阅读全文
摘要:线程的生命周期包括以下几个阶段: 1. 新建状态(New):当一个线程对象被创建时,它处于新建状态。此时线程对象已经被创建,但还没有开始运行。 2. 就绪状态(Runnable):当线程调用start()方法后,线程进入就绪状态。此时线程已经准备好运行,但可能还没有被分配到CPU时间片。 3. 运行
阅读全文
摘要:在开始讨论java多线程安全机制之前,首先从内存模型来了解一下什么是多线程的安全性。 我们都知道java的内存模型中有主内存和线程的工作内存之分,主内存上存放的是线程共享的变量(实例字段,静态字段和构成数组的元素),线程的工作内存是线程私有的空间,存放的是线程私有的变量(方法参数与局部变量)。线程在
阅读全文
摘要:我们都知道,在并发编程中,并不是线程越多就效率越高,线程数太少可能导致资源不能充分利用,线程数太多可能导致竞争资源激烈,然后上下文切换频繁造成系统的额外开销。大量的超时报警,通过工具分析,cs指标很高,然后分析日志,发现有大量wait()相关的Exception,这个时候我们怀疑是在多线程并发处理的
阅读全文
摘要:线程池常见的工作队列有以下几种: 1. 无界队列:使用一个无限制的队列来保存等待执行的任务,直到线程池中的线程可用时才会执行任务。这种队列可以保证任务不会被拒绝,但是可能会导致内存溢出。 2. 有界队列:使用一个固定大小的队列来保存等待执行的任务,如果队列已满,则新提交的任务将被拒绝。这种队列可以避
阅读全文
摘要:一、初始化线程的几种方式? 1、继承Thread2、实现Runnable接口3、实现Callable接口+FutureTask(可以拿到返回结果,可以处理异常)4、创建线程池的方式。方式1和方式2:主线程无法获取线程的运算结果。方式3:主线程可以获取线程的运算结果,但是不利于控制服务器中的线程资源,
阅读全文
摘要:CAS(Compare and swap)比较和替换是设计并发算法时用到的一种技术。简单来说,比较和替换是使用一个期望值和一个变量的当前值进行比较,如果当前变量的值与我们期望的值相等,就使用一个新值替换当前变量的值。 一、前言 了解了一下JDK1.8中ConcurrentHashMap的实现,发现它
阅读全文