Java
文章平均质量分 78
基础概念
程序少年不秃头
知其然,知其所以然
展开
-
Java8 新特性 之 lambda 表达 和 函数式接口
【代码】Java8 新特性 之 lambda 表达 和 函数式接口。原创 2023-03-05 16:39:29 · 679 阅读 · 0 评论 -
JUC 之 基础理论
jstack 进程号。原创 2023-02-25 15:43:53 · 453 阅读 · 0 评论 -
JUC 之 CompletableFuture
至此引出 CompletableFuture,以声明式的方式优雅处理这些需求,Future 能干的,CompletableFuture 都能干。简单的业务场景使用 Future 完全 OK。原创 2023-02-25 15:43:31 · 575 阅读 · 0 评论 -
JUC 之 线程阻塞工具 LockSupport
每个线程对象中都有一个中断标识位,用于表示线程是否被中断;通过调用线程对象的 interrupt 方法将该线程的标识位设为 true,可以在别的线程中调用,也可以在自己的线程中调用。中断只是一种协作协商机制,Java 没有给中断增加任何语法,中断的过程完全需要程序员自己实现。若要中断一个线程,你需要手动调用该线程的 interrupt 方法,接着你需要自己写代码不断地检测当前线程的标识位,如果为 true,表示别的线程请求这条线程中断,此时该做什么需要你自己写代码实现。以上两个对象使用的限制条件。原创 2023-02-25 15:42:37 · 409 阅读 · 0 评论 -
JUC 之 线程局部变量 ThreadLocal
【代码】JUC 之 ThreadLocal。原创 2023-02-25 15:41:40 · 457 阅读 · 0 评论 -
JUC 之 比较交换 CAS
没有 CAS 之前,多线程环境下不使用原子类保证线程安全 i++,只能通过 synchronized 加锁的方式,高并发多写情况下,性能影响很大;使用 CAS 之后,可以使用原子类(通过版本号戳记流水原子引用(AtomicStampedReference)可解决 ABA 问题。)保证线程安全,类似于。原创 2023-02-25 15:39:46 · 554 阅读 · 0 评论 -
JUC 之 Synchronized 与 锁升级
Java 5 以前,只有 Synchronized,这是操作系统级别的重量级操作(需要用户态和内核态之间的切换为什么每个对象都可以成为一个锁?Java 对象是天生的 Monitor,每一个 Java 对象都有成为 Monitor 的潜质,因为在 Java 的设计中,每一个 Java 对象都自带一把内部锁 或者 Monitor 锁Monitor 的本质是依赖底层操作系统 Mutex Lock 实现,操作系统实现线程之间的切换需要从用户态到内核态的转换,成本极高。原创 2023-02-25 15:38:38 · 234 阅读 · 0 评论 -
JUC 体系的基石——AQS
抽象队列同步器;volatile + cas 机制实现的锁模板,保证了代码的同步性和可见性,而 AQS 封装了线程阻塞等待挂起,解锁唤醒其他线程的逻辑。AQS 子类只需要根据状态变量,判断是否可获取锁,是否释放锁,使用 LockSupport 挂起、唤醒线程即可定义:是用来实现锁或者其他同步器组件的公共基础部分的抽象实现,是重量级基础框架及整个 JUC 体系的基石,主要用于解决锁分配的问题官网:为实现阻塞锁和相关的同步器提供一个框架,依赖于先进先出的一个等待;原创 2023-02-25 15:34:04 · 354 阅读 · 0 评论 -
JUC 之 Java 内存模型 JMM
读屏障(Load Memory Barrier):在读指令之前插入读屏障,让工作内存或 CPU 高速缓存中的缓存数据失效,重新回到主内存中获取最新数据;处理器在读屏障之后的读操作,都是在读屏障之后执行,保证 Load 屏障指令之后的读取数据指令一定能够读到最新数据。写屏障(Store Memory Barrier): 在写指令之后插入写屏障,强制把写缓冲区的数据刷回到主内存中,告诉处理器在写屏障之前将所有存储在缓存中的数据同步到主内存。保证可见性和有序性(禁重排)原创 2022-12-08 18:32:13 · 359 阅读 · 0 评论 -
Java ThreadPoolExecutor线程池具体参数设置
——重要参数corePoolSize:核心线程数核心线程数会一直存活,即使没有任务执行当线程数小于核心线程数,即使有线程空闲,线程池也会有限创建新线程处理设置 allowCoreThreadTimeout = true (默认为false) 时,核心线程会超时关闭queueCapacity:任务队列容量(阻塞队列)当核心线程数达到最大时,新任务会放在队列中排队等待执行maxPoolSize:最大线程数当线程数>=corePoolSize,且任务队列已满时,线程池会原创 2022-01-25 11:22:50 · 678 阅读 · 0 评论 -
Java经典高频面试问题
Java基础https://mp.weixin.qq.com/s/-xFSHf7Gz3FUcafTJUIGWQ1. 线程和进程的区别进程:是系统进行资源分配和调度的基本单位作用是使程序能够并发执行提高资源利用率和吞吐率;创建、销毁、切换会产生大量的时间和空间的开销,数量不能太多;线程:是进程的一个实体,使操作系统有更高的并发性一个进程中至少有一个线程2. synchronized 的原理Java提供的原子性内置锁(监视器锁),排他锁使用synchronized之后,会在编译原创 2021-08-07 16:46:25 · 164 阅读 · 0 评论 -
线程池创建,任务执行
/** * 阻塞队列线程池,队列满了不会抛异常,会阻塞 */ private ThreadPoolExecutor executor = new ThreadPoolExecutor(64, 64, 0L, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<>(16), ThreadFactoryBuilder.create().setNamePr...原创 2021-04-26 19:50:19 · 179 阅读 · 0 评论 -
正则匹配中文
/** * 正则匹配中文 * * @param text * @return */ private static String rexChinese(String text) { StringBuilder stringBuilder = new StringBuilder(); // 按指定模式在字符串查找 String pattern = "[\\u4e00-\\u9fa5]"; ...原创 2021-04-25 22:04:19 · 107 阅读 · 0 评论 -
Java设计模式学习笔记
软件工程中,设计模式是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。由建筑设计领域引入到计算机科学的。是站在结构性、扩展性、稳定性、复用性的角度上考虑,而不是功能实现的角度考虑。——设计模式常用七大原则1. 单一职责原则基本介绍:对类来说,即一个类应该只负责一项职责,如类A负责两个不同的职责:职责1和职责2。当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1,A2。注意事项和细节:降低类的复杂度,一个类只负责一项职责提高类的可读性,可维护性.原创 2020-12-23 22:31:15 · 188 阅读 · 0 评论 -
Java注解学习记录
内置注解@Override:重写,定义在java.lang.Override中,此注释只用于修辞方法,表示一个方法声明打算重写超类的另一个方法Deprecated:定义在java.lang.Deprecated中,此注释可以用于修辞方法,属性,类;表示不鼓励程序员使用这样的元素,通常是因为它很危险或者存在更好的选择@SupperessWarnings:定义在java.lang.SupperessWarnings中,用来抑制编译警告的信息元注解作用:就是负责注解其他注解,Java定义了4个标准原创 2020-11-22 19:37:25 · 105 阅读 · 0 评论 -
JVM底层原理分析 + 性能调优
基本概念JVM位置JVM运行在操作系统之上的,与硬件没有直接的交互体系结构类装载器ClassLoader负责加载class文件,class文件在文件开头有特定的文件标示(cafe babe),将class文件字节码内容加载到内存中,并将这些内容转换成方法区中的运行时数据结构并且ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定并不是所有后缀为.class的文件都能被加载,只有在文件开头为cafe babe的文件才是唯一认证原创 2020-11-05 22:59:56 · 1791 阅读 · 1 评论 -
JUC基本概念、详例
java.util.concurrent在并发编程中使用的工具类java.util.concurrentjava.util.concurrent.atomicjava.util.concurrent.locks多线程模板编程高内聚低耦合线程——操作——资源类原创 2020-10-29 19:39:54 · 506 阅读 · 2 评论 -
Java NIO基本概念+样例
——简介Java NIO(New IO——新IO,NON Blocking IO——非阻塞IO),从Java1.4版本开始引入的一个新的IO API,可以代替Java IO API。NIO与原来的IO有同样的作用和目的,但是使用方式完全不同,NIO支持面向缓冲区的、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。NIO与IO的主要区别通道和缓冲区Java NIO核心:通道(Channel)和缓冲区(Buffer)。通道表示打开到IO设备(例如:文件、套接字)的连接。若需要N使用原创 2020-10-13 14:50:53 · 131 阅读 · 0 评论 -
JVM内存结构存储
1.程序计数器 PC Register每个线程都有一个程序计算器,就是一个指针,指向方法区中的方法字节码(下一个将要执行的指令代码),由执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不记。2.本地方法栈 Native Method Stack本地方法栈与虚拟机栈基本类似,区别在于虚拟机栈为虚拟机执行的java方法服务,而本地方法栈则是为Native方法服务3.方法区 Method Area用于存储虚拟机加载的:静态变量+常量+类信息+运行时常量池 (类信息:类的版本、字段、方法、.原创 2020-06-02 11:46:50 · 211 阅读 · 0 评论 -
最新最全最适用Java学习路线 & 部分面试题
面试题https://blog.csdn.net/fangchao2011/article/details/89203535https://blog.csdn.net/qq_41701956/article/details/103253168http://blog.itpub.net/69917606/viewspace-2642545/原创 2020-04-03 16:29:06 · 993 阅读 · 1 评论 -
Windows / Linux 完整图文配置Java环境变量
完整图文配置Java环境变量1.右击桌面图标“此电脑”选择“管理”,出现以下界面选择界面上高级系统设置选择界面的“环境变量”点击“新建”1.配置PATH路径变量名:“PATH”变量值选择“浏览目录”;选择安装jdk下的bin目录2.配置JAVA_HOME变量名:“JAVA_HOME”变量值选择“浏览目录”;选择安装的jdk目录3.配置CLASSPATH变量...原创 2019-09-27 16:51:51 · 846 阅读 · 0 评论