Document

随笔分类 -  多线程

摘要:在一个应用程序中,我们需要多次使用线程,也就意味着,我们需要多次创建并销毁线程。而创建并销毁线程的过程势必会消耗内存。而在Java中,内存资源是及其宝贵的,所以,我们就提出了线程池的概念。 线程池:Java中开辟出了一种管理线程的概念,这个概念叫做线程池,从概念以及应用场景中,我们可以看出,线程池的 阅读全文
posted @ 2020-09-08 21:41 马宝云 阅读(507) 评论(0) 推荐(0)
摘要:CountDownLatch CountDownLatch闭锁是在java1.5被引入,存在于java.util.cucurrent包下。 CountDownLatch是一个同步辅助类,让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒。CountDownLatch是通过一个计数器来实现的,计数器 阅读全文
posted @ 2020-07-23 23:27 马宝云 阅读(190) 评论(0) 推荐(0)
摘要:公平和非公平锁 公平锁:是指多个线程按照申请锁的顺序来获取锁,类似排队,先来后到。 非公平锁:是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁在高并发的情况下,有可能会造成优先级反转或者饥饿现象。 两者区别: 并发包中ReentrantLock的创建可以指定 阅读全文
posted @ 2020-07-20 23:25 马宝云 阅读(332) 评论(0) 推荐(0)
摘要:在并发环境下,我们经常使用的集合类(List、Map、Set)其实都是不安全的。 集合不安全问题之List List在单线程的情况下是安全的,但是多线程的情况下是不安全的,我们来看两段代码: 单线程 public class UnsafeList1 { public static void main 阅读全文
posted @ 2020-06-17 23:19 马宝云 阅读(391) 评论(2) 推荐(0)
摘要:ABA问题的产生 CAS会导致“ABA问题”。 CAS算法实现一个重要前提需要取出内存中某时刻的数据并在当下时刻比较并替换,那么在这个时间差类会导致数据的变化。 比如说一个线程1从内存位置V中取出A,这时候另一个线程2也从内存中取出A,并且线程2进行了一些操作将值变成了B,然后线程2又将V位置的数据 阅读全文
posted @ 2020-06-17 23:17 马宝云 阅读(821) 评论(0) 推荐(0)
摘要:讲解线路: CAS-->UnSafe-->CAS底层思想-->ABA-->原子引用更新-->如何规避ABA问题 CAS是什么 CAS的全称为Compare-And-Swap,即比较并交换,它是一条CPU并发原语。它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的。 C 阅读全文
posted @ 2020-06-17 23:16 马宝云 阅读(338) 评论(0) 推荐(0)
摘要:JUC简介 利用多线程提高效率,尽可能的利用cpu资源。java5以前多线程同步用了sychronized、volatile。在 Java 5.0 提供了 java.util.concurrent(简称JUC)包,在此包中增加了在并发编程中很常用的工具类,用于定义类似于线程的自定义子系统,包括线程池 阅读全文
posted @ 2020-06-17 23:15 马宝云 阅读(242) 评论(0) 推荐(0)
摘要:一、创建线程的第一种方式: 继承Thread ,由子类复写run方法。 步骤: 1,定义类继承Thread类; 2,目的是复写run方法,将要让线程运行的代码都存储到run方法中; 3,通过创建Thread类的子类对象,创建线程对象; 4,调用线程的start方法,开启线程,并执行run方法。 pu 阅读全文
posted @ 2020-02-16 18:24 马宝云 阅读(149) 评论(0) 推荐(0)