
JUC
文章平均质量分 70
是菜鸟不是咸鱼
是菜鸟不是闲鱼
展开
-
【面试】String的创建、线程池、深拷贝浅拷贝
1、String的两种创建方式以及存储方式第一种:双引号方式x和y都是指向同一个内存地址,他们的引用都是指向方法区的同一个内容。同一个String字面值无论被创建多少次,始终只有一个内存地址被分配,之后的都是这个String的拷贝,在java中称作“字符串驻留”。这种方式创建的时候首先会查看字符串池中是否已经存在,存在就直接返回PermGen中的该String对象,否则就会创建一个新的String对象,之后再放进字符串池中。String x = "abcd";String y = "abcd原创 2021-06-16 18:51:19 · 203 阅读 · 0 评论 -
【多线程】JUC的三个常用辅助类、读写锁
JUC辅助类1、CountDownLatch(倒计时器)其实就是一个倒计时器,只不过计的是线程的数量在这里加减的并发过程如何实现同步?ReentrantLock里的AKS,里边有state标志位,用volatile修饰的(但是volatile不能保证原子性,例如说自增自减的原子性不能保证,总线风暴)package com.kuang.add;import java.util.concurrent.CountDownLatch;// 计数器public class CountDown原创 2021-05-31 14:11:48 · 85 阅读 · 0 评论 -
【并发编程】关于ThreadLocal
1、ThreadLocal(线程局部变量)是什么?线程共享变量,该变量的类型是HashMapThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。作用:为每一个使用该变量的线程都提供一个变量值的副本,每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突,实现线程间的数据隔离。用于线程内跨类、跨方法传递数据。常见用法:1、存储单个线程上下文信息;2、让变量线程更安全;(每个线程内部都存了一份局部变量)3、减少参数的传递。原理原创 2021-05-20 16:59:13 · 192 阅读 · 2 评论 -
【并发编程】Fork/Join框架、四大函数式接口、Stream流式计算
1、Fork/Join框架1.1 基本思想:有点像大数据里边的map/reduce。1.2、工作窃取想法有点像负载均衡。为了充分利用线程进行并行计算,线程从双端队列的头部取出任务执行,然后先完成任务的线程会从其他线程队列的尾部窃取任务执行。1.3、Fork-Join的用法任务:从1加到10_0000_0000//测试类public static void test2() throws ExecutionException, InterruptedException {原创 2021-05-19 18:33:04 · 210 阅读 · 2 评论 -
【多线程】终止线程的方式、当中断失效、多线程的实现方式
1、Java终止线程的三种方式使用退出标志,使程序正常退出(run方法完成后线程终止)。使用stop()方法强行终止线程(被弃用)为什么弃用stop?1、调用 stop() 方法会立刻停止 run() 方法中剩余的全部工作,包括在 catch 或 finally 语句中的,并抛出ThreadDeath异常(通常情况下此异常不需要显示的捕获),因此可能会导致一些清理性的工作的得不到完成,如文件,数据库等的关闭。2、调用 stop() 方法会立即释放该线程所持有的所有的锁,导致数据得不原创 2021-05-18 15:30:36 · 285 阅读 · 0 评论 -
【多线程】Java的各种锁机制、锁的优化/升级(无锁、偏向锁、自旋锁、重量级锁)
无锁 最初是无锁状态,不需要加锁解锁(标志位01);没有对资源进行锁定,所有的线程都能访问并修改同一个资源,但同时只有一个线程能修改成功。有冲突就不修改,不冲突就修改偏向锁 然后当有一个线程开始访问同步块时,升级为偏向锁。(升级主要就是改变对象头的MARKWORD)优点: 加锁解锁不需要额外的消耗,适用于只有一个线程访问同步块场景;缺点: 如果线程间存在锁竞争,会带来额外锁撤销的开销。(只要有线程竞争资源,就撤销锁)第一次线程到达该同步块,通过CAS修改对象头的锁标志位,让锁对象.原创 2021-05-07 20:59:21 · 291 阅读 · 0 评论 -
【多线程】Java阻塞队列ArrayBlockingQueue和LinkedBlockingQueue的底层区别
一、ArrayBlockingQueue和LinkedBlockingQueue的底层区别队列大小不同。 ArrayBlockingQueue是有界的,初始化必须指定大小;而LinkedBlocingQueue可以是有界也可以是无界的,但是无界不是说无穷大,默认是Integer_MAX_VALUE;数据存储的容器不同 ,ArrayBlockingQueue采用的是数组作为数据存储容器;而LinkedBlockingQueue采用的以Node节点作为连接对象的链表;插入删除开销不同 。ArrayBlo原创 2021-05-07 20:14:59 · 341 阅读 · 0 评论 -
【多线程】各种锁简要介绍
各种锁简要介绍|–表级锁(锁定整个表)|–页级锁(锁定一页)|–行级锁(锁定一行)——锁索引,如果没有索引,InnoDB会通过隐藏的聚簇索引来对记录加锁(对表中所有数据加锁,和表锁差不多)|–共享锁(S锁,MyISAM 叫做读锁)可以在一个资源加多个共享锁(允许多个事务读),但也得所有共享锁都释放之后才能修改。select * from table lock in share mode|–排他锁(X锁,MyISAM 叫做写锁)——数据库增删改操作默认加排它锁,查询不加锁。一个资源只能加原创 2021-05-06 15:22:29 · 523 阅读 · 0 评论 -
【多线程】生产者消费者问题(Synchronized和Lock版本实现)
一、Synchronized和Lock【追根溯源】Sychronized 是Java内置的关键字,而Lock是一个类【自动挡与手动挡】Sychronized 自动释放锁,而Lock是手动释放(unlock)。(假如没有手动释放,就会造成死锁)【锁的状态】Sychronized 不能获取锁的状态,Lock可以;【在一棵树上吊死】Sychronized 当一个线程获取资源的锁,那么另外想要该资源的线程会一直等待,而Lock有tryLock,超时放弃等待;【锁的量】Sychronized 适用于锁少量原创 2021-05-05 19:31:06 · 170 阅读 · 0 评论 -
【面试题分析-多线程】线程池原理与参数
1、线程池的优点是什么?降低资源损耗。在线程池中创建线程,该线程的任务结束后,并非立刻销毁,而是存放在线程池中,该线程可以重复利用,从而减少创建和销毁线程的开销。提高响应速度。 当一个任务到达时,可以直接用线程池的线程执行,而非新创建;提高线程的可管理性。 线程是稀缺资源,假如无限制地创建线程,不仅会消耗系统资源,而且会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。2、线程池的原理是什么?当一个任务到达时,线程池的处理流程如下:a、查看核心线程池(CorePoolSize)是否原创 2021-05-05 16:32:30 · 127 阅读 · 0 评论 -
【面试题分析-多线程】关于Synchronized、volatile
1、Synchronized介绍以及如何使用?synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的⽅法或者代码块在任意时刻只能有⼀个线程执⾏。早期synchronized属于重量级锁,效率低,因为监视器锁是依赖底层操作系统的Mutex Lock来实现的,Java的线程是映射到操作系统的原生线程之上的。如果要挂起或者唤醒一个线程,都需要操作系统帮忙完成,而操作系统实现线程之间的切换也需要从用户态转换为内核态,转换的时间成本高。使原创 2021-05-03 20:33:23 · 210 阅读 · 2 评论 -
【面试题分析】线程的创建方式?
1、多线程创建的四种方式Java使用Thread类代表线程,所有线程对象都必须是Thread类或其子类的实例。1.1、继承Thread类创建线程(类的单继承有局限性)第一步:自定义线程类继承Thread类第二步:重写run()方法,编写线程执行体第三步:创建线程对象,调用start()方法启动线程//继承Thread类public class testThread extends Thread{ public void run(){ //重写run方法 for(int i = 0;原创 2021-04-27 20:47:30 · 128 阅读 · 0 评论 -
【JUC】并发线程下集合类如何保证安全
在学一个东西的时候:首先要会用,然后要寻找其他的解决方案,最后分析源码理解。一、集合类不安全多线程在集合下会出现的异常:并发修改异常。(ConcurrentModificationException)如何解决?1、用vector(因为vector底层代码是用了synchronized修饰的)List<String> list = new Vector<>();2、用集合的synchronizedList<String> list = Collectio原创 2021-04-12 16:01:11 · 813 阅读 · 0 评论