自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 一文了解Java并发编程

并发编程会引发哪些问题,如何解决?1.上下文切换, 解决方案:1.使用java的atomic包的原子操作类进行操作,该操作基于CAS算法,减少加锁。 2.无锁并发 不同线程处理不同分段的数据 3.减少不必要的线程 4.协程,单线程里多任务调度2.死锁 解决方案:一个线程避免获取多个锁 避免一个线程在一个锁内获取多个资源 使用定时锁 lock.tryLock(timeo...

2021-12-16 11:38:06 418

原创 集合和IO

集合Map HashTable 线程安全 HashMap 线程不安全Collections List 有序 可重复 ArrayList 动态数组 读取 线程不安全 LinkedList 链表 插删 线程不安全 Vector 数组 读取 线程安全 Set 无序 不可重复 Hash...

2021-12-01 11:13:10 108

原创 JDK8新特性

1.Lambda表达式:函数作为参数传递进方法中语法:(parameters)-> expretion (parameters)->{statements}MathOperation addOperation = (int a,int b) -> a + b;System.out.println("10+5="+operate(10,5,addOperation));2.方法引用(method reference):通过方法的名字来指向一个方法语法:静态方法引用:C...

2021-12-01 09:26:44 98

原创 线程安全与锁优化

何为线程安全?当多个线程访问对象时,不用考虑交替执行,也不需要额外的同步,调用这个对象的行为都可以获得正确的结果,则称这个对象是线程安全的。线程安全的实现方式 互斥同步 synchronized关键字编译成字节码时会在同步块的前后插入monitorenter和monitorexit指令,当执行monitorenter指令时,当前线程试图获取monitor对象的所有权,如果该对象未被锁定或者已被当前线程锁定,则将锁计数器+1,执行monitorexit指令时,锁计数器-1,当锁计数器为0...

2021-11-29 17:23:42 258

原创 Java内存模型与线程

《Java虚拟机规范》定义Java内存模型的主要目的是定义各种变量访问的规则,Java内存模型规定的所有变量都存放在主内存中,每个线程都有一个工作内存,线程对变量的操作只能在工作内存中进行,线程不能访问其他线程的工作内存,线程之间的交互只能通过主内存进行。工作内存与主内存之间的交互协议通过以下8个操作进行:lock和unlock,read和load、use和assign、store和write。volatile型变量的特性:1.可见性 volatile型变量被修改后立即对其他线程可见2.禁止重排序

2021-11-29 13:37:16 253

原创 JVM之类加载

类加载的过程加载:根据类的全限定名读取类的二进制字节流转化为方法区的类型结构,并在java堆中创建该类的Class对象作为方法区类型结构的访问入口校验:校验类型结构是否符合Java虚拟机规范,例如,校验Class文件结构,运行该类是否会危害虚拟机自身安全(校验Code属性)准备:给类变量分配内存并赋初始值解析:将常量池的符号引用转化为直接引用初始化:执行类构造器的<cinit>()方法怎样确保类的唯一性?类的唯一性是由类和类加载器共同确定三层类加载器:启动类加载器:加载&lt

2021-11-26 10:31:14 356

原创 关于GC的三个问题

哪些内存需要垃圾回收?java虚拟机栈、本地方法栈、程序计数器的内存都是随线程生随线程灭,只需要关注堆和方法区的垃圾回收java堆中哪些对象需要回收:在GC Roots之间没有可达引用链哪些对象可以作为GC Root: 虚拟机栈中的引用的对象 本地方法中的引用的对象 方法区类型成员变量引用的对象 方法区中常量引用的对象 Java虚拟机内部的引用,如基本数据类型的Class对象、常驻的异常对象、系统类加载器 被同步锁(synchronize)持有的对象...

2021-11-23 14:49:40 174

原创 哪些内存区域可能发生内存溢出异常?

有四个区域可能发生内存溢出异常虚拟机栈、本地方法栈、堆、方法区虚拟机栈和本地方法栈:每个线程创建时会创建一个虚拟机栈,如果调用的是本地方法则创建本地方法栈,当线程调用方法时会创建一个栈帧用于存放局部变量表、操作数栈、动态连接、方法出口等信息,方法的调用直至结束都对应着一个栈帧从出栈到入栈的过程,当线程申请的栈深度超过虚拟机允许的最大深度时会发生栈泄漏异常(StackOverflowError),如果栈深度是可扩展的,当线程无法为栈帧申请到内存时会发生内存溢出(OutOfMemoryError)异常。多

2021-11-23 10:29:25 815

原创 《Netty_Redis_Zookeeper高并发实战》学习笔记

第1章 高并发时代的必备技能基于NIO的客户端、服务端编程框架netty JBOSS提供的java开源框架,既能开发高并发、高可用、高可靠的服务端程序,也能开发高可用、高可靠的客户端程序。 NIO(Non-blocking I/O) 非阻塞输入输出 使用Netty的应用:kafka、RocketMQ等消息中间件,Elastic Search搜索引擎、大数据处理Hadoop的RPC框架、主流分布式通信框架Dubbo Netty受青睐的原因:Netty提供异步的、事件驱动的...

2021-05-25 17:00:43 253

原创 Java并发编程的艺术学习笔记(十)——Executor框架

第10章 Executor框架Java线程既是工作单元也是执行机制,JDK5开始把工作单元和执行机制分离开来。工作单元包括Runnable和Callable,执行机制由Executor框架提供10.1 Executor框架简介10.1.1 Executor框架的两级调度模型在Hotspot VM的内存模型中,Java线程被一对一映射成本地操作系统线程。Java线程启动时会创建一个本地线程,Java线程终止时,对应的本地线程会被回收。在上层,Java多线程程序通常把应用分解成若干个任务,通过用户级的

2021-03-12 17:59:04 103

原创 Java并发编程的艺术学习笔记(九)——Java中的线程池

第9章 Java中的线程池线程池的好处:1.降低资源消耗:减少线程创建和销毁,重复利用线程2.提高响应速度:线程提前创建,接收到任务线程立即执行3.提高线程的可管理性:线程池可以统一分配、调优和监控9.1 线程池的实现原理 当接收到一个新任务时,线程池工作流程如下: 1.线程池判断核心线程池里的线程是否都在执行任务,如果不是,创建一个新的工作线程来执行任务,如果是,下一步; 2.线程池判断工作队列是否已满,如果不是,则将新任务存储到工作队列,如果是,下一步; ...

2021-03-12 11:56:37 83

原创 Java并发编程的艺术学习笔记(八)——Java中的并发工具类

第8章 Java中的并发工具类8.1 等待多线程完成的CountDownLatch CountDownLatch countDownLatch = new CountDownLatch(N) 构造方法中的N表示期望等待N个点完成 countDownLatch.count(); 调用该方法后 N就会减1 countDownLatch.await(); 阻塞当前线程直到N变为08.2 同步屏障CyclicBarrier 让一组线程到达一个屏障时被阻塞,...

2021-03-11 10:40:30 81

原创 Java并发编程的艺术学习笔记(七)——Java中的13个原子操作类

第7章 Java中的13个原子操作类Java从JDK1.5开始提供了jav.util.concurrent.atomic包,这个包中的原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方式。7.1 原子更新基本类型 AtomicBoolean:原子更新布尔类型 AtomicInteger:原子更新整型 Atomiclong:原子更新长整型 以上3个类提供的方法几乎一模一样,以AtomicInteger为例讲解: int addAndG...

2021-03-10 16:15:34 56

原创 Java并发编程的艺术学习笔记(六)——Java并发容器和框架

第六章 Java并发容器和框架6.1ConcurrentHashMap实现原理和使用 线程安全且高效的HashMap6.1.1 为什么要使用ConcurrentHashMapHashMap 可能导致程序死循环:多线程会导致HashMap的Entry链表形成环形结构,一旦形成环形结构,Entry的next节点永远不为空,就会产生死循环获取entryHashTable 线程安全但低效:使用Synchronized来保证线程安全ConcurrentHashMap 使用锁分段技术提升访问效率:将数据分段存

2021-03-10 14:29:31 74

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除