java/J2SE
文章平均质量分 91
worn.xiao
这个作者很懒,什么都没留下…
展开
-
Spring Boot 集成 WebSocket 实现服务端推送消息到客户端
本文简单地介绍了 Spring Boot 集成 WebSocket 实现服务端主动推送消息到客户端,是不是十分简单呢?大家可以自己也写个 demo 试试!原创 2023-06-24 13:18:40 · 2315 阅读 · 0 评论 -
AQS 工作原理
而且tryRelease()的返回值代表着该线程是否已经完成资源的释放,因此在自定义同步器的tryRelease()时,需要明确这条件,当已经彻底释放资源(state=0),要返回true,否则返回false。unparkSuccessor用unpark()唤醒等待队列中最前驱的那个未放弃线程,此线程并不一定是当前节点的next节点,而是下一个可以用来唤醒的线程,如果这个节点存在,调用unpark()方法唤醒。如果获取到资源,线程直接返回,否则进入等待队列,直到获取到资源为止,且整个过程忽略中断的影响。原创 2023-03-19 23:10:20 · 7054 阅读 · 2 评论 -
JAVA中的锁解析
java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8和Netty 3.10.6)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关知识。下面给出本文内容的总体分类目录 乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度。在Java和数据库中都有此概念对应的实际应用。先说原创 2022-07-13 16:07:15 · 424 阅读 · 0 评论 -
【java并发编程】ThreadPoolExecutor
一什么是线程池线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机的整体性能。线程池维护多个线程,等待监督管理者分配可并发执行的任务。这种做法,一方面避免了处理任务时创建销毁线程开销的代价,另一方面避免了线程数量膨胀导致的过分调度问题,保证了对内核的充分利用。而本文描述线程池是JDK中提供的ThreadPoolExecutor类。当然,使用线程池.原创 2022-05-17 10:38:05 · 1206 阅读 · 0 评论 -
深度解析ThreadLocal
ThreadLocal的作用主要是做数据隔离,填充的数据只属于当前线程,变量的数据对别的线程而言是相对隔离的,在多线程环境下,如何防止自己的变量被其它线程篡改。 在Spring实现事务隔离级别的源码中,Spring采用Threadlocal的方式,来保证单个线程中的数据库操作使用的是同一个数据库连接,同时,采用这种方式可以使业务层使用事务时不需要感知并管理connection对象,通过传播级别,巧妙地管理多个事务配置之间的切换,挂起和恢复。 Spring框架里面就是用的Th...原创 2022-05-13 18:02:34 · 401 阅读 · 0 评论 -
自定义JAVA类加载器
转自:http://blog.csdn.net/seu_calvin/article/details/52315125(问:自定义类加载器怎么实现,其中哪个方法走双亲委派模型,(实现findclass方法,一般用defineclass加载外部类),如何才能不走双亲委派。(重写loadclass方法))三个重要函数:loadClass,findClass,defineClassloadClass:调用父类加载器的loadClass,加载失败则调用自己的findClass方法findClass:转载 2021-01-30 14:11:37 · 152 阅读 · 1 评论 -
copyOnWriteArrayList & concurrentHashMap &ConcurrentLinkedQueue
并发问题汇总 ArrayList,LinkList都不是线程安全的,我知道Vector是增删改查方法都加了synchronized,保证同步,但是每个方法执行的时候都要去获得锁,性能就会大大下降,而CopyOnWriteArrayList 只是在增删改上加锁,但是读不加锁,在读方面的性能就好于Vector,CopyOnWriteArrayList支持读多写少的并发情况。 Hashmap是线程不安全的, ConcurrentHashMap 是常见的并发容器之一,可以用作并发场景下的缓存...原创 2020-05-12 00:23:17 · 605 阅读 · 0 评论 -
二叉查找树,平衡二叉树,红黑树
三 数据结构有了二叉查找树、平衡树为啥还需要红黑树?红黑树算是很难的一种数据结构吧,一般很少考察插入、删除等具体操作步骤,如果遇到要你手写红黑树的面试官,就直接告辞吧。所以,更多是会考察你对红黑树的理解程度,考察的最多的估计就是为什么有了二查找查找树/平衡树还需要红黑树这个问题了。3.1 二叉查找树的缺点二叉查找树的特点就是左子树的节点值比父亲节点小,而右子树的节点值比父亲节点...原创 2020-05-03 11:26:08 · 518 阅读 · 0 评论 -
HashMap,HashTable,TreeMap,HashSet,TreeSet
本文承接上文 https://blog.csdn.net/worn_xiao/article/details/1059008282.2 mapMap 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。 Map没有继承于Collection接口 从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。2.2.1 map常用元素 1 添加,删除操作:...原创 2020-05-03 11:23:08 · 623 阅读 · 1 评论 -
List&LinkList,Queue&Deque
一 集合框架 集合产生的背景 “世间本没有路 走的人多了也便成了路”—周树人(鲁迅)世间本没有集合,(只有数组参考C语言)要的人多了,便有了集合有人想有可以自动扩展的数组就好了,所以有了List有人想有没有不重复的数组,所以有了set有人想有没有自动排序的组数,所以有了TreeSet,TreeList,Tree**而几乎有有的集合都是基于数组来实现的,因为集合是...原创 2020-05-03 11:10:47 · 999 阅读 · 0 评论 -
java8新特性之lambda表达式
Java 8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁。当开发者在编写Lambda表达式时,也会随之被编译成一个函数式接口演示代码下载地址:https://github.com/prettyRain/java8demo.git1.引入lambda表达式1)用接口Runnable演示@Test public void test6(){ /...转载 2020-02-16 12:47:26 · 354 阅读 · 2 评论 -
【J2SE】BIO,NIO,AIO,Netty
javaIO编程.随着java版本的不断升级与迭代,java的IO模型开始得到改变。从原始的BIO,到1.4以后发布的NIO,再到对NIO进行的改进AIO分别对IO模型做了优化,BIO是同步,阻塞的IO.NIO是同步,非阻塞的IO,AIO是异步非阻塞的IO,那么性能就自然不用多说了,肯定是依次得到了提升的。一 文件基本的IO流与IO 模型,可以说它是通过序列化后的字节流来进行...原创 2018-11-07 08:43:36 · 309 阅读 · 0 评论 -
JAVA_并发
Java 语言中的 volatile变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。锁提供了两种主要特性:互斥(mutual exclusion):互斥即一次只允许一个线程持有某个特定的锁,因此可使用该特性实转载 2016-10-23 14:58:25 · 283 阅读 · 0 评论 -
Thread之脏读
public class Readable { private String username="A"; private String password="AA"; synchronized public void setValue(String username,String password) throws InterruptedException{ this.username原创 2017-01-02 20:44:11 · 307 阅读 · 0 评论 -
读取.Properties配置文件的一些方法
方式一:采用ServletContext读取,读取配置文件的realpath,然后通过文件流读取出来。因为是用ServletContext读取文件路径,所以配置文件可以放入在web-info的classes目录中,也可以在应用层级及web-info的目录中。文件存放位置具体在eclipse工程中的表现是:可以放在src下面,也可放在web-info及webroot下面等。因为是读取出路径后原创 2017-01-17 19:40:22 · 1801 阅读 · 0 评论 -
关于静态代码块,初始化块,与构造函数
在学习Java基础期间,子父类的静态代码块、构造代码块、构造方法的执行顺序容易混淆,现在通过一段程序来说明它们的执行顺序。一、先看一个简单的静态测试程序:运行结果:执行父类的静态代码块。执行子类的静态代码块。执行父类的构造代码块。执行父类的不带参数的构造方法。执行子类的构造代码块。执行子类的不带参数转载 2017-06-15 18:59:26 · 298 阅读 · 0 评论 -
java线程之并发访问
目录(?)[-]一 线程安全问题二 如何解决线程安全问题三 synchronized 同步方法或者同步块四 可重入性五 注意事项六 总结引用摘要: 在多线程编程中,线程安全问题是一个最为关键的问题,其核心概念就在于正确性,即当多个线程访问某一共享、可变数据时,始终都不会导致数据破坏以及其他不该出现的结果。而所有的并发模式在解决这个问题时,采用的方案都是序列化转载 2017-02-14 15:41:30 · 308 阅读 · 0 评论 -
java反射
Java 反射一 认识反射l “程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。l 尽管在这样的定义与分类下Java不是动态语言,它却有着一个非常突出的动态相关机制:Reflection。l 什么是反射a)反射的概念是由Smith在19原创 2016-09-25 18:03:00 · 596 阅读 · 0 评论