![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC
文章平均质量分 72
kkmigu
拿下拿下
展开
-
小白的JUC学习12_锁
锁锁就是用来解决并发编程下的安全问题的,锁有很多种类型,下面来瞅瞅一、锁介绍Java提供了两种加锁的方式1、Synchronized关键字2、Lock接口学习各种锁之前,要明白我们在Java中使用的锁并不是确切地只为一个特定的锁,下面具体解释1.1、悲观&乐观锁一、悲观锁悲观锁就像互斥锁一样,多个线程争抢该锁时,只有一个线程能使用,其他都会阻塞所以这也是悲观的含义,因为该锁总是认为在某个线程对齐共享变量进行修改时,总会有其他线程也会对其修改所以某个线程持有后只有释原创 2021-04-03 13:30:41 · 120 阅读 · 2 评论 -
小白的JUC学习11_Volatile
Volatile一、Volatile介绍Volatile 是Java虚拟机提供的轻量级的同步机制特性:保证可见性不保证原子性保证有序性我们将围绕以上三点来探讨Volatile的作用1.1、验证可见性案例:启动一个线程,并使其死循环状态,通过额外线程修改共享变量使其关闭注意必须是共享变量(JMM特性)package com.migu.jmm;import java.util.concurrent.TimeUnit;/** * 测试共享变量可见性 */publ原创 2021-04-03 12:57:40 · 85 阅读 · 0 评论 -
小白的JUC学习10_JMM
JMM一、JMM介绍JMM( Java Memory Model )称为Java内存模型二、相关定义和特征一、内存模型:描述了程序中各个变量(实例域、静态域和数组元素)与主内存之间的关系原子性:这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程) 【比如synchronized】一个操作不能被打断,要么全部执行完毕,要么不执行在这点上有点类似于事务操作,要么全部执行成功,要么回退到执行该操作之前的状态。可见性: 一个线程对原创 2021-04-03 12:46:24 · 281 阅读 · 0 评论 -
小白的JUC学习09_常用辅助类
JUC下的常用辅助类1.1、ConutDownLancuh一、ConutDownLancuh介绍ConutDownLancuh是一个用于计数的线程类,类似倒计时,当然单单计数肯定是没意义的,所以还要搭配一个方法,下面介绍二、使用主要的两个方法:CountDownLatch对象的countDown()方法:计数减一CountDownLatch对象的await()方法当计数线程不为0时,将一直等待下去,直到被唤醒package com.migu;import java原创 2021-04-03 12:38:18 · 93 阅读 · 0 评论 -
小白的JUC学习08_读写锁
读写锁ReadWriteLock一、ReadWriteLock介绍ReadWriteLock是一个接口也位于java.util.concurrent.locks包下真正实现为ReentrantReadWriteLock类,该类在内部提供了两个内部类读写类读写分离:可以有多个线程同时进行读取写数据时,只有一个线程能获取锁,其他线程只能排队二、使用分别创建读写锁,应用到对应地方即可记得解锁读过程中也要加锁的原因是:为了防止写的过程中,也进行读取,否则如果写的过程回滚了,那问原创 2021-04-02 23:39:08 · 63 阅读 · 0 评论 -
小白的JUC学习07_Future
Future一、Futrue介绍Future在Java中是一个接口:实现Future表示具有异步地对线程进行计算的能力API设计如下:boolean cancel(boolean mayInterruptIfRunning) //试图取消此任务的执行。 V get() // 等待线程,直到任务完成,返回结果 V get(long timeout, TimeUnit unit) //指定等待时间,当中任务完成,返回结果,否则抛出异常boolean isCancelled() // 判断任原创 2021-04-02 23:28:08 · 180 阅读 · 0 评论 -
小白的JUC学习06_线程池
线程池一、线程池介绍线程池:事先创建一组线程供程序调用,并且可以对其复用二、为什么需要线程池降低资源消耗: 通过重复利用已创建的线程降低线程创建和销毁造成的消耗提高响应速度:当出现新的请求任务时,不需要等待线程创建即可立即使用提高线程的可管理性 : 可以进行统一的分配,调优和监控三、使用线程池Java中提供的线程池为:ExecutorsExecutors线程池类位于java.util.concurrent包下,实现了Executor接口我们可以自定义线程池:需要先了解原创 2021-04-02 19:08:16 · 90 阅读 · 0 评论 -
小白的JUC学习05_并发下的集合
并发下的集合在上篇我们学到了并发包下的阻塞队列,接下来继续学习并发下的集合,并发下使用普通的集合是存在问题的,需要对其解决1.1、传统解决方案不说啥了,先来简简单单的测试一下:public static void main(String[] args) { List<String> list = new ArrayList<>(); for (int i = 0; i < 10; i++) { new Thread(() ->原创 2021-04-02 15:44:48 · 105 阅读 · 2 评论 -
小白的JUC学习04_阻塞队列BlockingQueue
阻塞队列BlockingQueue一、阻塞队列介绍阻塞队列(BlockingQueue)是一个接口,位于java.util.concurrent包下该接口实现了Collection、Iterable、Queue接口常用两个实现类:ArrayBlockingQueue、SynchronousQueue队列:该数据结构就不细讲了二、为什么需要阻塞队列首先我们需要回到传统设计的生产者消费者模式在这种模式中,有一种情况就是,当生产者生产的数据为空时,那么消费者就需要进入等原创 2021-04-02 15:23:29 · 91 阅读 · 0 评论 -
小白的JUC学习03_精准通知下的生产消费者模式
生产者消费者模式一、介绍生产者消费者模式是一种设计模式,开发中我们需要一种这样的场景:一个模块用于产生数据,称为生产模块一个模块用于消费生产模块生成的数据,称为消费模块处理这些模块,可以是函数,可以是线程或者进程,我们把处理生产模块的角色称为生产者,处理消费模块的角色称为消费者但是在这之中,最重要的不是生产者也不是消费者,而是数据。这个数据到底如何定义:必须是共享的数据生产、消费模块对其进行处理时,应该要达到“相反”功能,也就是对数据处理时需要变化则数据是对:消费者、生产者原创 2021-04-02 13:21:52 · 85 阅读 · 0 评论 -
小白的JUC学习02_Lock&Callable
简单使用Lock&Callable当JDK1.5开始,对同步代码加锁和创建线程有了两种方式加锁:使用Synchronized使用Lock创建线程:Runnable(或者继承Thread)Callable下面一步步简单阐释1、加锁1.1、传统的Synchronized直接对共享数据的地方对其加SynchronizedSynchronized本质上就是一个队列,锁:应用在成员方法就是锁实例对象静态方法就是锁Class对象,那么一个进程中只有这一个锁,有A线原创 2021-04-02 10:45:16 · 127 阅读 · 0 评论 -
小白的JUC学习01_基础知识
线程进程并发并行一、线程与进程进程(process):简单对其理解就是一个应用程序的实例深奥点的解释就是: 进程是CPU资源分配的最小单位也就是CPU会为每个应用程序单独分配一块内存空间,该进程在内存空间是独立的、受保护的,里面存储了什么文本区域、数据区域、堆栈等等如果想实现多个进程互相访问,好像要用到什么共享内存或者是socket技术其他特性:一个进程包括1~n个线程线程(thread):而线程可以说是组合在进程类的一个个对象,共享本进程中的数据深奥点的解释就是:原创 2021-04-02 09:10:12 · 86 阅读 · 0 评论