Java
文章平均质量分 79
当走的路甚远
这个作者很懒,什么都没留下…
展开
-
Spring - 注解整理
Documented 注解表明这个注解应该被 javadoc工具记录. 默认情况下,javadoc是不包括注解的. 但如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中.更多内容可以参考:Annotation深入研究——@Documented注释使用用@Configuration加载Spring1、 @Configuration配置spring并启动spring容器2、 @Configuration启动容器+@Bean注册B原创 2022-06-22 18:39:51 · 615 阅读 · 1 评论 -
Spark - scala加载Excel文件
从Excel文件创建一个DataFrameimport org.apache.spark.sql._val spark: SparkSession = ???val df = spark.read .format("com.crealytics.spark.excel") .option("sheetName", "Daily") // Required .option("useHeader", "true") // Required原创 2021-08-24 11:53:42 · 1169 阅读 · 0 评论 -
Spring - Nacos 之 no server available错误
在application.properties中设置nacos服务的地址,即spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848在bootstrap.properties中设置nacos注册中心的地址spring.cloud.nacos.config.server-addr=127.0.0.1:8848注意一个是discovery,另一个是config,当控制台输出报错信息为no server available时很可能为此项配置原创 2021-07-28 15:31:12 · 9321 阅读 · 1 评论 -
Spring - Nacos之endpoint is blank错误
问题:在使用过程中将nacos作为注册中心 和 配置中心 并没有对 配置中心 进行配置所以出现了Caused by: com.alibaba.nacos.api.exception.NacosException: endpoint is blank错误1.在application.yml中进行了配置后启动还是会出现错误最主要的原因是配置文件的原因先看官方文档的配置看文档的第二条github文当中的配置是使用bootstrap.properties 来进行配置的也可以使用boo..转载 2021-07-28 15:18:42 · 812 阅读 · 0 评论 -
Spring - 深入解析ThreadLocal源码
概念ThreadLocal 是线程的局部变量, 是每一个线程所单独持有的,其他线程不能对其进行访问。当使用ThreadLocal维护变量的时候 为每一个使用该变量的线程提供一个独立的变量副本,即每个线程内部都会有一个该变量,这样同时多个线程访问该变量并不会彼此相互影响,因此他们使用的都是自己从内存中拷贝过来的变量的副本, 这样就不存在线程安全问题,也不会影响程序的执行性能。threadlocal,ThreadLocalMap,thread 三者关系图ThreadLocal的数据结构.转载 2021-05-13 11:05:03 · 264 阅读 · 0 评论 -
Spring - JUC BlockingQueue的原理及使用方法
1.前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。2.认识BlockingQueue 阻塞队列,顾名思义,首先它是一个队列,而一个队列在数据结构中所起的作用大致如下图所示:从上图我们可以很清楚看到,通过一个共享的队列,可以使得数...转载 2021-02-28 14:07:44 · 330 阅读 · 0 评论 -
Spring - JUC 理解Callable接口、Future接口
Callable接口: Callable,新启线程的一种方式,返回结果并且可能抛出异常的任务,在前面的新启线程的文章中用过,但是没有具体讲解 优点: 可以获取线程的执行结果,也称为返回值 通过与Future的结合,可以实现利用Future来跟踪异步计算的结果Runnable和Callable的区别: Callable规定的方法是call(),Runnable规定的接口是run(); Callable的任务执行后可返回值,而Runnable的任务是不能有返回值的转载 2021-02-28 13:07:57 · 304 阅读 · 0 评论 -
Spring - JUC 公平锁和非公平锁原理详解
一、简介Java语言中有许多原生线程安全的数据结构,比如ArrayBlockingQueue、CopyOnWriteArrayList、LinkedBlockingQueue,它们线程安全的实现方式并非通过synchronized关键字,而是通过java.util.concurrent.locks.ReentrantLock来实现。ReentrantLock的实现是基于其内部类FairSync(公平锁)和NonFairSync(非公平锁)实现的。 其可重入性是基于Thread.currentThrea转载 2021-02-25 16:11:02 · 1653 阅读 · 0 评论 -
Spring - JUC ReentrantLock原理
ReentrantLock主要利用CAS+AQS队列来实现。它支持公平锁和非公平锁,两者的实现类似。CAS:Compare and Swap,比较并交换。CAS有3个操作数:内存值V、预期值A、要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。该操作是一个原子操作,被广泛的应用在Java的底层实现中。在Java中,CAS主要是由sun.misc.Unsafe这个类通过JNI调用CPU底层指令实现ReentrantLock主要利用CAS+AQS队列来实现。它支持公平转载 2021-02-25 11:03:28 · 281 阅读 · 0 评论 -
Spring - JUC Lock和synchronized的区别和使用
今天看了并发实践这本书的ReentantLock这章,感觉对ReentantLock还是不够熟悉,有许多疑问,所有在网上找了很多文章看了一下,总体说的不够详细,重点和焦点问题没有谈到,但这篇文章相当不错,说的很全面,主要的重点都说到了,所有在这里转载了这篇文章。 在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问。本文我们继续来探讨这个问题,从Java5之后,在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那就是Lock。 .转载 2021-02-23 18:01:37 · 412 阅读 · 0 评论 -
Spring - JUC Java中的锁有哪些?各自都有什么样的特性?
在Java中锁的种类主要有这些:公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁 可中断锁上面是很多锁的名词,这些分类并不是全是指锁的状态,有的指锁的特性,有的指锁的设计,所以有可能两种锁的名词可以同时形容一种关键字,下面总结的内容是对每个锁的名词进行一定的解释。首先明确锁是什么东西,要理解锁的概念:锁是在资源中的,是要访问资源(如对象实例,Class类实例,属性变量,代码块等)的一部分,线程只有获取该.转载 2021-02-23 13:52:18 · 432 阅读 · 0 评论 -
Spring - JUC synchronized关键字详解
引入编写一个类似银行、医院的叫号程序(要求:多个窗口叫号,不重号、不跳号)这个用到多线程来实现多个窗口叫号的功能,首先要解决的就是资源共享问题,因为不同线程(不同窗口)所使用的叫号计数器应该是同一个,否则就会出现重号的问题。资源共享的解决方案有两种:使用static关键字修饰要共享的变量,将其变为全局静态变量,也就是放到了JMM的主内存中,这要就实现了资源的共享。 实现Runnable接口,这个接口和Thread类的区别之一就是可以实现资源的共享,因为实现Runnable接口的线.转载 2021-02-23 13:48:38 · 548 阅读 · 0 评论 -
Spring - JUC CAS(Compare And Swap)操作的底层原理以及应用详解
Unsafe 是 CAS 的核心类, Java 无法直接访问底层操作系统,而是通过本地( native )方法来访问。不过尽管如此, JVM 还是开了一个后门: Unsafe ,它提供了硬件级别的原子操作, 这里的 compareAndSwapInt () 就是 Unsafe 类提供的硬件原子操作之一 。转载 2021-02-23 13:26:37 · 248 阅读 · 0 评论 -
Spring - JUC 深入理解Volatile关键字及其实现原理
volatile的用法volatile通常被比喻成"轻量级的synchronized",也是Java并发编程中比较重要的一个关键字。和synchronized不同,volatile是一个变量修饰符,只能用来修饰变量。无法修饰方法及代码块等。volatile的用法比较简单,只需要在声明一个可能被多线程同时访问的变量时,使用volatile修饰就可以了。如以下代码,是一个比较典型的使用双重锁校验的形式实现单例的,其中使用volatile关键字修饰可能被多个线程同时访问到的singleton。转载 2021-02-23 11:34:46 · 606 阅读 · 0 评论 -
Spring - Spring一个Bean装配过程以及Bean实例化过程
主要流程:1、读取配置文件2、实例化bean和填充bean属性这个粗略的流程感觉更像是一个需求,有了这个需求,那么spring内部是怎么处理的呢?我们知道spring的两个核心接口BeanFactory和ApplicationContext。BeanFactory主要定义容器的核心方法,ApplicationContext加以扩展,主要使用的还是ApplicationContext。在ApplicationContext的子类中,AbstractApplicationContext中的ref转载 2021-02-23 11:01:51 · 964 阅读 · 0 评论 -
Spring - SpringMVC工作原理
SpringMVC的工作原理图:SpringMVC流程1、 用户发送请求至前端控制器DispatcherServlet。2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。4、 DispatcherServlet调用HandlerAdapter处理器适配器。5、 ...转载 2021-02-23 10:42:20 · 173 阅读 · 0 评论 -
IDEA - 快速编写代码模板 以及 javap集成命令整合
1、IDEA 快速编写代码模板1.1 设置方式今天学到一招,通过设置 IDEA 快捷键,快速敲出模块化的代码。比如,创建 用 Lambda 方式编写的线程 代码模块:(1). File -> Settings(2). Editor -> Live Templates, 点击➕号,创建一个自己的模板组,比如“Java-Thread”(3). 点击添加按钮,在下方分别填入模板内容(4). 点击Define, 将 Java 下面的所有选项都勾选上..原创 2021-02-18 16:57:43 · 222 阅读 · 0 评论