JUC

JUC学习系列04

线程基础 线程状态 初始,可运行(分为拿到了 cpu 资源或者等待 cpu 时间片对应于操作系统的运行和就绪态),阻塞(等待获取锁资源),无限等待(等待其它线程显式地唤醒,否则不会被分配 CPU 时间片),有限等待(超时自动唤醒),终止 关于线程等待 Thread.sleep(time)常用一个线程 ......
JUC

JUC源码学习系列03

Synchronized 什么是 Synchronized:这是 Java 控制多线程访问共享资源的一种方式,是线程之间通信的一种方式。 什么同步代码块:同步代码块用于阻止多个线程同时对同一方法中的部分代码进行访问。 理解起来,可以看成同步代码块相当于一个保护共享资源的一块区域,这个区域需要有特定身 ......
源码 JUC

JUC源码学习系列02

ReentrantLock 学习 ReentrantLock 最特别的点在于他的可重入特性,允许同一个线程多次获得同一个锁,而不被阻塞. 内部维护了表示锁占用状态的 state 变量,当同一个线程来获取锁时,state 会+1 并 继续获得锁,依次达到锁可重入效果,同时若获取失败进入到 CLH 队列 ......
源码 JUC

JUC源码学习系列01

JUC 源码阅读 JUC 指的是 Java Util Concurrency,即 Java 工具包下的并发工具类库(Java Util Concurrency Utilities)。JUC 提供了一系列用于并发编程的工具类、接口和工具方法,帮助开发者更容易地实现多线程程序,并提供了更高级别、更灵活、 ......
源码 JUC

juc下的方法

CountDownLatch是一个Java的并发工具类,用于使一个线程等待其他线程完成各自的工作。其主要用法如下: 创建一个CountDownLatch实例,指定初始计数器的值。 java复制代码 CountDownLatch countDownLatch = new CountDownLatch( ......
方法 juc

JUC——让步与优先级

Thread.yield():方法作用是:暂停当前正在执行的线程对象(及放弃当前拥有的cup资源),并执行其他线程 yield():做的是让当前运行线程回到可运行的状态,以允许具有相同优先级的其他线程获得运行机会。因此,使用目的是让相同优先级的线程之间能适当的轮转执行。但是,实际中无法保证yield ......
优先级 JUC

JUC_start和run

类型: run方法是同步 而start是异步 作用: run方法的作用是存放任务代码 ,start的方法是启动线程 线程数量方面: 执行run方法,他不会产生新线程,而执行start方法hi产生新线程 调用次数 run方法可以被执行无数次,而start方法只能被执行一次,原因在于线程不能被重复启动。 ......
JUC_start start JUC run

juc 入门

JUC并发快速入门 线程池、CAS、ThreadLocal、AQS 1. 线程池 1.1 概述 什么是线程池? 线程池和数据库连接池非常类似,可以统一管理和维护线程,减少没有必要的开销。 为什么要使用线程池? 因为频繁的开启线程或者停止线程,线程需要被cpu重新从就绪状态调度到运行状态,需要发送cp ......
juc

juc 学习

CyclicBarrier 应用场景是比如在做压力测试时,使用多少个用户并发,做集合点测试。 比如设置 100个用户并发,100个用户同时进行压测,只有100个用户压测完毕时,才能再发起下一波的压力测试。 package com.study.juc; import java.util.concurr ......
juc

JUC的强大辅助类

JUC的强大辅助类 juc中提供了常用的辅助类,通过这些辅助类,可以很好的解决线程数量过多时,Lock锁的频繁操作这三种辅助类为: 1.CountDownLatch,减少计数。 2.CyclicBarrier,循环栅栏。 3.Semaphore,信号灯。 减少计数器(CountDownLatch) ......
JUC

JUC并发编程(终章)各种锁的理解

各种锁的理解 公平锁、非公平锁 公平锁:先到先得(不可插队) 非公平锁:达者为先(可插队) >默认 public ReentrantLock() { //默认非公平锁 sync = new NonfairSync(); } //重载的构造方法,通过fair控制是否公平 public Reentran ......
JUC

JUC并发编程学习笔记(十九)原子引用

原子引用 带版本号的原子操作! 解决ABA问题,引入原子引用(乐观锁思想) AtomicStampedReference类解决ABA问题 package org.example.cas; import java.util.concurrent.TimeUnit; import java.util.c ......
原子 笔记 JUC

JUC并发编程学习笔记(十八)深入理解CAS

深入理解CAS 什么是CAS 为什么要学CAS:大厂你必须深入研究底层!有所突破! java层面的cas >compareAndSet compareAndSet(int expectedValue, int newValue) 期望并更新,达到期望值就更新、否则就不更新! package org. ......
笔记 JUC CAS

JUC并发编程学习笔记(十七)彻底玩转单例模式

彻底玩转单例模式 单例中最重要的思想 >构造器私有! 恶汉式、懒汉式(DCL懒汉式!) 恶汉式 package single; //饿汉式单例(问题:因为一上来就把对象加载了,所以可能会导致浪费内存) public class Hungry { /* * 如果其中有大量的需要开辟的空间,如new b ......
模式 笔记 JUC

JUC并发编程学习笔记(十六)Volatile

Volatile 保证可见性 private volatile static Integer num = 0; 使用了volatile关键字,即可保证它本身可被其他线程的工作内存感知,即变化时也会被同步变化。 不保证原子性 原子性:不可分割 线程A在执行任务时是不可被打扰的,也不能被分割,要么同时成 ......
Volatile 笔记 JUC

JUC并发编程学习笔记(十五)JMM

JMM 请你谈谈对Volatile的理解 Volatile是java虚拟机提供的轻量级的同步机制 1、保证可见性 2、不保证原子性 3、禁止指令重排 什么是JMM JVM->java虚拟机 JMM->java内存模型,不存在的东西,概念!约定 关于JMM的一些同步的约定: 线程解锁前,必须把共享变量 ......
笔记 JUC JMM

JUC并发编程学习笔记(十四)异步回调

异步回调 Future设计的初衷:对将来的某个事件的结果进行建模 在Future类的子类中可以找到CompletableFuture,在介绍中可以看到这是为非异步的请求使用一些异步的方法来处理 点进具体实现类中,查看方法,可以看到CompletableFuture中的异步内部类,里面是实现的异步方法 ......
笔记 JUC

JUC并发编程学习(十三)ForkJoin

ForkJoin 什么是ForkJoin ForkJoin在JDK1.7,并发执行任务!大数据量时提高效率。 大数据:Map Reduce(把大任务拆分成小任务) ForkJoin特点:工作窃取 为什么可以取窃取其他线程的任务呢?因为这里面维护的都是双端队列(即队列的两端都可以取元素) ForkJo ......
ForkJoin JUC

JUC并发编程学习笔记(十二)Stream流式计算

Stream流式计算 什么是Stream流式计算 大数据:存储+计算 集合、MySql这些的本质都是存储东西的; 计算都应该交给流来操作! 一个案例说明:函数式接口、lambda表达式、链式编程、Stream流式计算 package org.example.stream; import java.u ......
笔记 Stream JUC

JUC并发编程学习(十一)四大函数式接口(必备)

四大函数式接口(必备) 程序员:泛型、反射、注解、枚举 新时代程序员:lambda表达式、链式编程、函数式接口、Stream流式计算 函数式接口:只有一个方法的接口 @FunctionalInterface public interface Runnable { public abstract vo ......
函数 接口 JUC

JUC并发编程学习笔记(十)线程池(重点)

线程池(重点) 线程池:三大方法、七大参数、四种拒绝策略 池化技术 程序的运行,本质:占用系统的资源!优化资源的使用!-> 池化技术(线程池、连接池、对象池......);创建和销毁十分消耗资源 池化技术:事先准备好一些资源,有人要用就拿,拿完用完还给我。 线程池的好处: 1、降低资源消耗 2、提高 ......
线程 重点 笔记 JUC

JUC并发编程学习笔记(九)阻塞队列

阻塞队列 阻塞 队列 队列的特性:FIFO(fist inpupt fist output)先进先出 不得不阻塞的情况 什么情况下会使用阻塞队列:多线程并发处理、线程池 学会使用队列 添加、移除 四组API 方式 抛出异常 不抛出异常,有返回值 阻塞等待 超时等待 添加 add offer put ......
队列 笔记 JUC

JUC并发编程学习笔记(八)读写锁

读写锁 ReadWriteLock ReadWriteLock只存在一个实现类那就是ReentrantReadWriteLock,他可以对锁实现更加细粒化的控制 读的时候可以有多个阅读器线程同时参与,写的时候只希望写入线程是独占的 Demo: package org.example.rw; impo ......
笔记 JUC

JUC并发编程学习笔记(七)常用的辅助类

常用的辅助类 CountDownLatch 这是一个JUC计数器辅助类,计数器有加有减,这是减。 使用方法 package org.example.demo; import java.util.concurrent.CountDownLatch; //线程计数器 public class Count ......
常用 笔记 JUC

JUC并发编程学习笔记(六)Callable(简单)

Callable(简单) callable接口和runnable接口类似,都是为了执行另外一条线程而设计的,区别是Runnable不会返回结果也不会抛出异常。 1、可以有返回值 2、可以抛出异常 3、方法不同;run()/call(); Runnable 实现Runnable接口,重写run方法,无 ......
Callable 笔记 JUC

Java 利用JUC CountDownLatch 线程池Executors 实现多线程操作

Java 利用JUC CountDownLatch 线程池Executors 实现多线程操作 业务场景:某个业务操作非常耗时,但又必须等这个操作结束后才能进行后续操作 import org.springframework.util.CollectionUtils; import java.util. ......
线程 CountDownLatch Executors Java JUC

JUC并发编程学习(五)集合类不安全

集合类不安全 List不安全 单线程情况下集合类和很多其他的类都是安全的,因为同一时间只有一个线程在对他们进行修改,但是如果是多线程情况下,那么集合类就不一定是安全的,可能会出现一条线程正在修改的同时另一条线程启动来对这个集合进行修改,这种情况下就会导致发生并发修改异常(在jdk11的环境下多次测试 ......
JUC

JUC并发编程学习笔记(四)8锁现象

8锁现象 八锁->就是关于锁的八个问题 锁是什么,如何判断锁的是谁 对象、class模板 深刻理解锁 锁的东西无外乎就两样:1、同步方法的调用者,2、Class模板。 同一个锁中,只有当前线程资源释放后才会被下一个线程所接手。 同步方法的调用者是两个不同的实例时,互不相关。 静态同步方法(stati ......
现象 笔记 JUC

JUC并发编程学习笔记(三)生产者和消费者问题

生产者和消费者问题 synchronized版-> wait/notify juc版->Lock 面试:单例模式、排序算法、生产者和消费者、死锁 生产者和消费者问题 Synchronized版 package org.example.pc; public class A { public stati ......
生产者 消费者 笔记 问题 JUC

JUC并发编程学习笔记(二)Lock锁(重点)

Lock锁(重点) 传统的synchronized 传统的解决多线程并发导致的一些问题我们会使用synchronized关键字来解决,synchronized的本质就是队列、锁。 Lock的实现类有:可重复锁(最常用)、读锁、写锁 在创建可重复锁时,可传入boolean类型值来决定该锁是公平锁(先来 ......
重点 笔记 Lock JUC
共137篇  :1/5页 首页上一页1下一页尾页