java多线程
文章平均质量分 82
你佳哥
勿于浮沙筑高台
展开
-
java多线程(二十)线程安全集合类
基于白嫖B站黑马程序员视频:全面深入学习java并发编程,java基础进阶中级必会教程目录1 问题2 线程安全集合类2.1 遗留的安全集合2.2 修饰的安全集合2.3 J.U.C安全集合类3 ConcurrentHashMap3.1 使用3.2 jdk 7并发死链问题1 问题java.util下的一些容器,是线程不安全的,当有多个线程去读写的时候,容易造成读写的不是真实的值;2 线程安全集合类2.1 遗留的安全集合Hashtable 和 Vector出现时间比较早,put和get方法被sync原创 2020-11-24 20:26:25 · 355 阅读 · 0 评论 -
java多线程(十九)CyclicBarrier
基于白嫖B站黑马程序员视频:全面深入学习java并发编程,java基础进阶中级必会教程目录1 场景2 例子3 注意点1 场景countDownLatch的问题,不能重复利用,一旦count创建完毕,就是构造函数,就不能更改,只能递减。CyclicBarrier循环栅栏就排上用场了,他会在count变成0之后再从count初始值开始;2 例子public class Main { public static void main(String[] args) throws Interrupte原创 2020-11-24 19:20:32 · 102 阅读 · 0 评论 -
java多线程(十八)CountDownLatch
基于白嫖B站黑马程序员视频:全面深入学习java并发编程,java基础进阶中级必会教程目录1 场景2 例子3 原理1 场景倒计时锁,用来线程协作,等待所有的线程完成倒计时以后再继续执行。2 例子public class Main { public static void main(String[] args) throws InterruptedException { int num = 10000; //创建CountDownLatch对象原创 2020-11-24 18:55:14 · 177 阅读 · 0 评论 -
java多线程(十七)Semaphore
基于白嫖B站黑马程序员视频:全面深入学习java并发编程,java基础进阶中级必会教程目录1 场景2 例子3 解释说明4 原理1 场景本意,信号量,用来限制能够同时访问共享资源(可以多个)的线程上限。2 例子public class Main { public static void main(String[] args) { //创建semaphore对象 Semaphore semaphore = new Semaphore(3); /原创 2020-11-24 16:42:47 · 877 阅读 · 7 评论 -
java多线程(十六)读写锁
基于白嫖B站黑马程序员视频:全面深入学习java并发编程,java基础进阶中级必会教程目录1 ReentrantReadWriteLock1.1 使用例子1.2 注意点1.3 原理2 StampedLock1 ReentrantReadWriteLock支持可重入的读写锁,在于优化读写,读时间远远小于写,所以希望读-读并发。1.1 使用例子class Data { private String data;//数据 private ReentrantReadWriteLock rea原创 2020-11-24 16:01:15 · 203 阅读 · 0 评论 -
java多线程(十五)ReentrantLock原理
基于白嫖B站黑马程序员视频:全面深入学习java并发编程,java基础进阶中级必会教程目录1 AQS2 非公平锁原理3 可重入锁原理4 可打断原理5 公平锁6 条件变量原理1 AQSAbstractQueuedSynchronizer是一个抽象类,是阻塞式锁和相关同步器工具的框架。state属性:表示资源的状态(独占模式和共享模式);FIFO等待队列:类似于Monitor的EntryList;条件变量Condition:实现等待、唤醒;2 非公平锁原理成员变量 sync = new N原创 2020-11-24 15:00:23 · 206 阅读 · 1 评论 -
java多线程(十四)线程池
基于白嫖B站黑马程序员视频:全面深入学习java并发编程,java基础进阶中级必会教程目录1 为什么要使用线程池?2 线程池2.1 线程池的状态2.2 构造方法2.3 Executors.newFixedThreadPool2.4 Executors.newCachedThreadPool2.5 Executors.newSingleThreadExecutor2.6 提交任务2.7 关闭线程池1 为什么要使用线程池?在这之前对于任务的管理都是单个操作一个线程的相关方法。重点在于单个线程的情况。试想这原创 2020-11-24 10:48:23 · 190 阅读 · 0 评论 -
java多线程(十三)不可变类
基于白嫖黑马程序员白嫖视频:全面深入学习java并发编程,java基础进阶中级必会教程目录1 不可变类的设计2 final原理2.1 设置final 的原理2.2 获取final的原理1 不可变类的设计成员变量加final:只能读不能改;类名加final:不能被继承;保护性拷贝:都是在内存创建新的对象(副本);包装类:Byte、Short、Long缓存范围-128-127,(享元模式);包装类:Character缓存范围0-127;包装类:Integer默认范围-128-127,最小值不变原创 2020-11-23 10:51:01 · 177 阅读 · 0 评论 -
java多线程(十二)无锁并发
基于白嫖黑马程序员白嫖视频:全面深入学习java并发编程,java基础进阶中级必会教程目录1 CAS与volitile2 原子整型3 原子引用4 原子累加器5 Unsafe1 CAS与volitileCAS(compare and set)比较并交换来实现锁。private AtomicInteger num = new AtomicInteger(10000);//原子整型public void sub() { while (true) { //获得值 i原创 2020-11-23 10:05:12 · 456 阅读 · 1 评论 -
java多线程(十一)多线程内存(volatile关键字)
基于白嫖黑马程序员白嫖视频:全面深入学习java并发编程,java基础进阶中级必会教程目录1 java内存模式(JMM)2 可见性2.1 例子2.2 原因2.3 改进(volatile关键字)即共享变量在多线程间的可见性问题与多条指令执行时的有序性问题。1 java内存模式(JMM)java memory model,包括抽象的主存和工作内存,底层对应CPU寄存器、缓存、硬件内存等。(类似于RUNNABLE抽象了OS层面的运行时、可运行、阻塞)主存:共享变量的存储位置;工作内存:线程变量存储位原创 2020-11-19 21:48:11 · 164 阅读 · 0 评论 -
java多线程(十)多把锁ReentrantLock
基于白嫖黑马程序员白嫖视频:全面深入学习java并发编程,java基础进阶中级必会教程目录11原创 2020-11-18 21:07:56 · 1178 阅读 · 1 评论 -
java多线程(九)线程状态转换
基于白嫖黑马程序员白嫖视频:全面深入学习java并发编程,java基础进阶中级必会教程目录1 线程状态2 转换过程1 线程状态2 转换过程t.start():线程开始运行;obj.wait()/obj.notify():对象调用等待同步;t.join():线程调用线程加入;LockSupport.park()/LockSupport.unpark(t):锁同步方法;obj.wait(long n):对象有限时间等待;t.join(long n):线程有限时间等待;Thread.sle原创 2020-11-18 19:12:47 · 102 阅读 · 1 评论 -
java多线程(八)LockSupport的park/unpark方法
基于白嫖黑马程序员白嫖视频:全面深入学习java并发编程,java基础进阶中级必会教程目录1 介绍2 原理1 介绍LockSupport.park():暂停当前线程;LockSupport.unpark():恢复某个线程的运行;注意:park之后的线程状态是WAITING状态;可以提前unpark,要是执行到park时,发现提交提前被调用了unpark,就继续执行;不必和Monitor配合使用;2 原理每个线程都会关联一个park对象(类似于每个对象都会关联一个Monitor)。原创 2020-11-18 18:38:08 · 1585 阅读 · 1 评论 -
java多线程(七)对象的wait/notify方法
基于白嫖黑马程序员白嫖视频:全面深入学习java并发编程,java基础进阶中级必会教程目录1 Monitor主要结构2 各自转化规则3 API介绍(注意是对象的方法,不是线程)4 wait(long t)和sleep(long t)的区别1 Monitor主要结构Owner:正拥有对象的线程(RUNNABLE);EntryList:处于阻塞状态(BLOCKED)的等待Owner使用完对象的其他线程;WaitSet:当前线程发现自己条件不具备,调用wait方法,进入阻塞(WAITING)状态;原创 2020-11-18 14:37:46 · 315 阅读 · 2 评论 -
java多线程(六)偏向锁
基于白嫖黑马程序员白嫖视频:全面深入学习java并发编程,java基础进阶中级必会教程这里写目录标题一级目录二级目录三级目录一级目录二级目录三级目录原创 2020-11-18 10:25:57 · 587 阅读 · 1 评论 -
java多线程(五)轻量级锁
基于白嫖黑马程序员白嫖视频:全面深入学习java并发编程,java基础进阶中级必会教程目录1 场景2 对象头的Mark Word部分3 原理4 锁膨胀5 注意点1 场景如果一个对象虽然有多线程访问,但是多线程访问时间是错开的。2 对象头的Mark Word部分图片来源:JAVA 对象头解析3 原理参与者:线程和对象(无Monitor参与);创建锁记录对象:当线程执行到临界区时,线程在栈帧(Stack Frame)里面创建一个锁记录(Lock Record)对象,这个对象两部分内容,一是可原创 2020-11-17 16:43:47 · 264 阅读 · 1 评论 -
java多线程(四)管程Monitor
基于白嫖黑马程序员白嫖视频:全面深入学习java并发编程,java基础进阶中级必会教程目录1 进程、线程、管程2 临界区和竞争状态2.1 临界区(Critical Section)2.2 竞态条件(Race Condition)3 synchronized4 方法上的synchronized5 synchronized锁类和锁对象6 常见的线程安全类7 对象头7.1 普通对象的对象头7.2 数组对象7.3 Mark Word结构(32位)8 Monitor1 进程、线程、管程进程:操作系统对于资源分原创 2020-11-17 15:50:26 · 279 阅读 · 0 评论 -
java多线程(三)线程的六种状态
这里写目录标题一级目录二级目录三级目录一级目录二级目录三级目录原创 2020-11-17 09:35:54 · 135 阅读 · 0 评论 -
java多线程(二)Thread类常用方法
目录1 start2 sleep3 interrupt4 yield5 setPriority6 join1 startstart方法是线程运行的方法,但是不是马上运行,而是告诉任务调度器,该线程可以被执行了;start方法只能启动一次;2 sleep从线程从Running状态进入Timed Waiting状态;参数是毫秒值;可能会抛出InterruptedException异常;当在休眠时被interrupt()了;Thread.sleep()在哪个线程里面被调用,哪个线程就休眠多久原创 2020-11-16 21:57:40 · 239 阅读 · 0 评论 -
java多线程(一)创建线程的三种方式
基于白嫖黑马程序员白嫖视频:全面深入学习java并发编程,java基础进阶中级必会教程目录1 实现Runable接口2 继承Thread类3 实现Callable接口1 实现Runable接口实现runable接口,重写run()方法。class Task implements Runnable{ @Override public void run() { System.out.println("hello"); }}public class Main原创 2020-11-16 16:42:57 · 93 阅读 · 0 评论