自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 资源 (2)
  • 收藏
  • 关注

原创 ArrayList 源码解析

ArrayList 集合类,用于储存元素。底层是基于数组实现的,

2023-07-10 21:01:59 117

原创 经纬度转换

开发工具类

2023-06-09 20:39:37 759

原创 笔记 12 · ThreadLocal全面分析

每个线程独立拥有,线程存在,ThreadLocal就存在。线程本地(局部),空间换时间。本质上,ThreadLocal是通过空间换取时间,从而实现每个线程当中都会有一个变量的副本,这样每个线程都会操作该副本,从而完全规避了多线程的并发问题。Java中存在四种类型的引用:XxxReference强引用(Strong),如果一个对象被强引用指向,那么GC不会回收这个对象。(1)M m = new M(); 栈中的m会指向堆中的M(2)只有指向M的引用消失了,M才会被回收。软引用(Soft),在

2021-04-24 17:12:04 329

原创 笔记 11 · Future 任务异步执行

Future代表了异步计算的结果,提供诸多方法检查异步计算是否完成,是否需要等待,以及获取结果。结果只能通过 get() 方法获取。如果我们调用了get方法,但异步任务却并未完成,会陷入阻塞状态,直到异步计算结束。表示未来异步计算的结果。提供了检查计算是否完成、等待其完成以及检索计算结果的方法。只有在计算完成时,才能使用方法get检索结果,必要时阻塞,直到它准备就绪。可通过取消方法取消执行任务。一旦计算完成,就不能取消计算。如果为了可取消性而想使用Future,但不提供可用的结果,可以声明Future&

2021-04-24 14:37:41 598

原创 笔记 10 · Compare and swap (CAS)

介绍synchronized关键字与Lock等锁机制都是悲观锁(悲观的想法:我在操作的时候,自认为一定会有其他线程来和我争抢,所以在操作前一定会先上锁),确保了接下来的所有操作都由当前线程去执行的。乐观锁(乐观的想法,我在操作的时候,自认为不会有其他的线程与我争抢锁):线程在操作之前不会做任何预先的处理,而是直接去执行。当在最后执行变量更新的时候,当前线程需要有一种机制来确保当前被操作的变量是没有被其他线程修改的;CAS是乐观锁的一种极为重要的实现方式。CAS(Compare And Swap) 比

2021-04-24 14:34:17 91

原创 笔记 · Cache line 缓存行对齐

假设 计算单元 要找变量X,需要从最近的缓存中找L1 --> L2 --> L3 --> 主内存。如果是要读取一个变量则顺序为:主内存 -> L3 -> L2 -> L1,之后 计算单元 开始计算。当我们读一个数据,会把相关的数据一块读过来(即 按块读取),class B { private static class T { public volatile long x = 0L; // long 类型 8字节 } pu

2021-04-23 20:55:04 605

原创 笔记 · new Object 的内存布局

问:Object o = new Object(); 在内存布局中占用了多少个字节?我们通过jol (java object Layout)工具来查看:如果是一个User对象呢?注:资料主要来源【马士兵公开课】

2021-04-23 20:54:20 93

原创 笔记 9 · Semaphore全面分析

Semaphore 是什么Semaphore 通常叫它信号量, 可以用来控制同时访问特定资源的线程数量,通过协调各个线程,以保证合理的使用资源。可以把它简单的理解成我们停车场入口立着的那个显示屏,每有一辆车进入停车场显示屏就会显示剩余车位减1,每有一辆车从停车场出去,显示屏上显示的剩余车辆就会加1,当显示屏上的剩余车位为0时,停车场入口的栏杆就不会再打开,车辆就无法进入停车场了,直到有一辆车从停车场出去为止。使用场景主要用于那些资源有明确访问数量限制的场景,常用于限流 。比如:数据库连接池,同时进

2021-04-23 20:53:06 107

原创 笔记 8 · CyclicBarrier全面解析

##应用场景与 countDownLatch差不多。一种同步辅助工具,允许一组线程都等待彼此到达一个共同的障碍点。cyclicbarrier在涉及固定大小的线程组的程序中很有用,这些线程偶尔必须等待对方。这个屏障被称为循环的,因为它可以在等待的线程被释放后重新使用。CyclicBarrier支持一个可选的Runnable命令,该命令在参与方中的最后一个线程到达之后,但在释放任何线程之前,在每个屏障点运行一次。此屏障操作有助于在任何一方继续之前更新共享状态。比较countDownLatch:1、主

2021-04-08 20:03:20 195

原创 笔记 7 · CountDownLatch全面解析

一种同步辅助工具,允许一个或多个线程等待一组在其他线程中执行的操作完成。用给定的计数器值初始化。由于调用倒计时方法,await方法阻塞直到当前计数达到零,之后释放所有等待线程,并立即返回任何后续的await调用。这是一种一次性现象——计数无法重置。如果需要重置计数的版本,请考虑使用CyclicBarrier。倒计时计数器是一种通用的同步工具,可用于多种用途。用一个计数初始化的倒计时计数器充当一个简单的开/关锁存器或门:所有调用倒计时的线程都在门处等待,直到它被调用倒计时的线程打开。初始化为N的倒计时计数

2021-03-31 20:27:30 417

原创 笔记 6 · interface Condition

11

2021-03-30 15:21:56 233

原创 笔记 5 · interface Lock锁

Lock 与synchronized在锁的处理上的重要差别锁的获取方式:Lock是通过程序代码的方式由开发者 手工获取lock()、tryLock()…Synchronized是通过JVM获取(无需开发者干预)。具体实现方式:Lock是通过程序代码的方式实现。Synchronized是通过JVM获取(无需开发者干预)。锁的释放方式:Lock务必要通过unlock() 方法在finally块中手工释放。synchronized是通过JVM释放(无需开发者干预)。–synchronize

2021-03-29 19:59:18 621

原创 笔记 4 · Volatile

只有满足以下所有条件时,才应该单独使用volatile变量:对变量的写入操作不依赖变量的当前值,或者你能确保只有单个线程更新变量的值。该变量不会与其他状态变量一起纳入不变性条件中。在访问变量时不需要加锁。不要修饰引用值。作用:实现long/double(8字节64位)类型变量的原子操作。解释:long/double数据类型和其他数据类型的区别:int a = 1; // 这是一次原子性操作(4字节32位)double a = 1.0;long/double的赋值是非原子性操作。

2021-03-27 20:31:56 111

原创 笔记 · 锁优化

自旋

2021-03-27 10:10:35 124 1

原创 笔记 3 · synchronized

1

2021-03-27 09:58:31 347

原创 笔记 · 锁名词

1

2021-03-27 09:53:19 181

原创 笔记 2 · wait()、notify()

资料来源【张龙】

2021-03-26 20:23:03 79

原创 笔记 1 · Thread implement Runnable {}

常见方法final native boolean isAlive(); -- 如果线程已启动但尚未终止,则该线程是活动的。返回 true;否则为false。final void setPriority(int newPriority); -- 设置线程的优先级,范围从1 - 10; -- 优先级的设定建议在 start() 调度前。 -- 优先级低只是意味着获得调度的概率低。这都要看CPU的调度情况。final void setDaemon(boolean on)

2021-03-25 19:58:16 431

原创 笔记 · 指令重排序

资料来源【马士兵公开课】

2021-03-24 21:00:04 293

原创 位运算案例

总结: Java位运算是针对于整型(byte、char、short、int、long)数据类型的二进制进行的移位操作。位运算认知* 数据类型 位数 byte 8 boolean 8 short 16 int ...

2020-01-11 16:30:45 262

原创 SDK不支持选定的Java版本8(最大值7)

selected Java version 8 is not supported by SDK (maximum 7)建立项目时,idea给了一个提示 ‘SDK不支持选定的Java版本8(最大值7)’问题的原因在:第一页的project SDK:为1.7。而第二页的java Version 最低为8.所以会提示 ‘SDK不支持选定的Java版本8(最大值7)’一开始我在想 SDK是...

2018-12-09 21:51:32 7789

原创 使用IntelliJ IDEA配置Tomcat

愁:如何在IntelliJ IDEA配置Tomcat?愁愁:在Run/Debug Configurations 页面点击➕号怎么也找不到Tomcat?愁愁愁:怎么配置默认浏览器?愁愁愁愁:artifacts按钮怎么我没有?愁愁愁愁愁:怎么启动WEB项目?你不愁?好吧,反正我在从MyEclipse 转到 IDEA时候,被这些问题难倒了。。。现在进入正题,初次写,写的不好、不明白的地方欢迎...

2018-12-09 19:21:07 533

Vue初级语法,版本1

1.vue语法 2.事件绑定 3.计算属性 4.vue组件功能开发 5.vue-cli使用

2019-04-15

mysql8用navicat可视化连接报错加密方式错误

Unable to load authentication plugin 'caching_sha2_password'. 在这种情况下,想要连接mysql8有两种方式: 1:安装MySQL8客户端(可视化软件,最新版12以上) 2:修改MySQL8的密码加密方式 本文采用第二种方式: mysql8之前的版本使用的密码加密规则是mysql_native_password,但是在mysql8则是caching_sha2_password,所以需要修改密码加密规则。

2019-04-15

空空如也

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

TA关注的人

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