自定义博客皮肤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)
  • 收藏
  • 关注

原创 Java并发05之原子类

由于Java方法无法直接访问底层系统,需要通过native方法来访问,基于Unsafe类可以直接操作特定内存的数据。Unsafe内部方法操作可以像C指针一样直接操作内存,因此Java中CAS操作的执行依赖于Unsafe类的方法。Unsafe类中的所有方法都是native修饰的,也就是说Unsafe类中的方法都直接调用操作系统底层资源。以一种线程安全的方式操作非线程安全对象内的某些字段,减少锁定的范围,只关注长期、敏感性变化的某一个字段,而不是整个对象,以达到精确加锁+节约内存的目的。

2024-07-18 00:10:36 437

原创 Java并发04之线程同步机制

当一个线程想要获得锁对象时,就会发现锁对象的Mark Work并不是存储null、哈希码和分代年龄(无锁),也不是存储线程指针、Epoch和分代年龄(偏向锁),也不是存储指向某一线程的Lock Record,而是存储了一个指向一个Monitor对象的指针,那么这个线程就会知道当前锁是一个重量级锁。此时,线程就会跑到Monitor对象的EntryList中,等待获得锁。-XX:+UseBiasedLocking 开启偏向锁-XX:BiasedLockingStartupDelay=0 关闭偏向锁延迟。

2024-07-17 00:12:37 680

原创 Java并发03之线程通信

如果某线程A调用park,那么除非另外一个线程调用unpark(A)给A一个许可,否则线程A将阻塞在park操作上。比如线程B连续调用了三次unpark函数,当线程A调用park函数就使用掉这个“许可”,如果线程A再次调用park,则进入等待状态。代码代码块中的代码必须执行完才会切换到其他线程,这样就能保证了线程之间的安全。原因分析:因为多线程是CPU随机执行的,当线程一执行输出语句时,还未执行ticket--时就跳转到线程二,此时就会出现数据没有及时更新、同时售卖同一张票的情况。

2024-07-12 00:19:47 687

原创 Java并发02之线程池

因此,线程池其实是没有区分核心线程和非核心线程的,都是一个Worker对象(该对象实现了Runnable接口)。通过引入corePoolSize和maximumPoolSize的概念,仅仅是在数量逻辑上进行区分,并没有实际区分核心线程和非核心线程的数量,这样可以在资源复用性和内存占用率做一个平衡。当一个线程完成任务时,它会从队列中取下一个任务来执行,当一个线程无事可做超过存活时间keepAliveTime时,所以,线程池的所有任务完成后它最终会收缩到核心线程数的大小。

2024-07-11 23:56:38 365

原创 CSS进阶笔记2

水平外边距永远不会有叠加,水平外边距指的是margin-left和margin-right。垂直外边距只会在以上三种情况下会叠加,垂直外边距指的是margin-top和margin-bottom。外边距叠加之后的外边距高度等于发生叠加之前的两个外边距中的最大值。外边距叠加针对的是block以及inline-block元素,不包括inline元素。因为inline元素的margin-top和margin-bottom设置无效。

2024-07-07 23:54:27 797

原创 CSS进阶笔记1

不同的浏览器,默认样式也是不同的。举个例子,ul元素有缩进样式。此外,它只能消除默认的padding和margin,像ul的列表项符号、em的斜体、strong的加粗等却没有去除。CSS的层叠性,指的就是样式的覆盖。对于同一个元素来说,如果我们重复定义多个相同的属性,并且这些样式具有相同的权重,CSS会以最后定义的属性的值为准;CSS的继承性,指的是子元素继承了父元素的某些样式属性,例如在父元素定义字体颜色(color属性),子元素会继承父元素的字体颜色。所谓的指定样式,指的是指定“当前元素”的样式。

2024-06-26 23:32:53 886

原创 HTML5笔记

并且从搜索引擎优化的角度来说,h1、h2、h3和h4这4个标签会被赋予一定的权重,而h5和h6的权重跟普通标签差不多,在SEO优化上意义不大。在实际开发中,对于“图片+图注”效果,我们都建议使用figure和figcaption这两个元素来实现,从而使得页面的语义更加良好。事实上,label标签有两种关联方式,我们拿复选框来说,下面两行代码是等价的。label标签for属性值为所关联的表单元素的id,例如,则其所关联的label标签应该为。

2024-06-24 23:29:36 775

原创 CSS基础笔记

在CSS中,我们可以使用word-spacing属性来定义两个单词之间的距离。在CSS中,我们可以使用border-collapse属性来去除单元格之间的空隙,也就是将两条边框合并为一条。在CSS中,我们可以使用text-align属性来控制文本在水平方向上的对齐方式。在CSS中,我们可以使用letter-spacing属性来调整两个字之间的距离。在CSS中,我们可以使用text-indent属性来定义p元素的首行缩进。在CSS中,我们可以使用caption-side属性来定义表格标题的位置。

2024-06-21 00:12:01 562

原创 HTML基础笔记

开始,到

2024-06-19 23:50:24 679

原创 Java语言12之时间类

Instant表示时间线上的某个时刻/时间戳。可以用来记录代码的执行时间,或用于记录用户操作某个事件的时间点。传统的Date类,只能精确到毫秒,并且是可变对象;新增的Instant类,可以精确到纳秒,并且是不可变对象,推荐用Instant代替Date。LocalDateTime兼容了LocalDate和LocalTime,几乎拥有二者的所有API,用法也相同。LocalTime和LocalDate用法差不多,直接贴代码。API根据用途的不同,大概可以分为如下几类。相差的年数、月数、天数。

2024-05-22 22:19:25 274 1

原创 Java并发01之多线程实现

方法三:使用stop方法强制停止线程,但这个方法在终结一个线程时不会保证线程的资源正常释放,通常是没有给予线程完成资源释放工作的机会,容易导致死锁,因此被标记为过期方法,同理还有suspend方法。也就是说,Java线程很大程度上依赖于操作系统采用什么样的线程模型,这点在不同的平台上没有办法达成一致,JVM规范中也并未限定Java线程需要使用哪种线程模型来实现,可能是一对一,也可能是多对多或多对一。但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态。

2023-10-06 22:03:57 47

原创 Java语言11之Optional

举例来说,如果你知道一个人可能有也可能没有车,那么Person类内部的car变量就不应该声明为Car,遭遇某人没有车时把null引用赋值给它,而是应该直接将其声明为Optional类型。orElseGet(Supplier other):如果optional不为空,则返回optional中的对象;orElse(T other):如果optional不为空,则返回optional中的对象;get():获取optional实例中的对象,当optional容器为空时报错。

2023-09-26 22:03:32 112

原创 Java语言10之Stream

分支/合并框架的目的是以递归方式将可以并行的任务拆分成更小的任务,然后将每个子任务的结果合并起来生成整体结果。第三,你需要在恰当的时候对它们进行同步来避免不希望出现的竞争条件,等待所有线程完成,最后把这些部分结果合并起来。可以用工厂的流水线生产来比喻Stream流编程,一般一个产品需要多步加工操作,通过流水线可以大大提高生产效率。Java8使用stream()可以得到一个串行流,而使用parallelStream()可以得到一个并行流,并行流可以通过开启多个线程并行计算从而提到计算效率。

2023-09-25 21:57:11 38

原创 Java语言09之函数式编程

可以把Lambda表达式理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常列表。可以把一个Lambda表达式看成一个接口的实现类(更准确的说是一个函数式接口的实现类,函数式接口是一个只拥有一个抽象方法的接口)。换句话说,方法引用就是Lambda表达式,也就是函数式接口的一个实例,通过方法的名字来指向一个方法,可以认为是Lambda表达式的一个语法糖。函数式接口指的是有且仅有一个抽象方法的接口。

2023-09-25 21:55:49 55

原创 Java语言08之JDBC

存储过程预先存储在MySQL服务器上,需要执行的时候,客户端只需要向服务器端发出调用存储过程的命令,服务器端就可以把预先存储好的这一系列SQL语句全部执行。在SSC中,key为SQL语句,value为对应的执行计划。其实是因为SQL语句在程序运行前已经进行了预编译,在程序运行时第一次操作数据库之前,SQL语句已经被数据库解析、优化和编译,因此,PreparedStatement类的本质就是缓存执行计划,跳过SQL语句的编译过程并重用执行计划,以达到减轻数据库的负担、提高访问数据库的速度的目的。

2023-09-24 20:32:04 123

原创 Java语言07之异常体系

Java把所有的非正常情况细分为三类:Error(错误),RuntimeException(运行时异常),checked Exception(受检异常、编译时异常)。

2023-09-23 22:39:35 20

原创 Java语言06之注解

只要理解和记住jdk内置的四个注解即可 (@Target,@Retention,@Documented,@Inherited)@Retention:保留的时间范围 (RetentionPolicy)SOURCE源文件保留(如@Override保留在源文件,编译后注解消失)CLASS编译时保留(如lombok生成get/set)RUNTIME运行时保留(如切面记录日志,或验证参数信息等)@Target:使用范围@Documented:保留注解信息。

2023-09-21 22:38:11 23

原创 Java语言05之反射与动态代理

动态代理的作用就是在不改变源码的基础上,实现对方法级别上的增强。在被代理的类的每个方法时,都会被拦截,此时可以在代理类中添加代码实现对方法的增强,可以看做是对类的横向扩展。Java的动态代理有两种形式:基于接口的动态代理、基于子类的动态代理。与之对应的是基于JDK实现的动态代理和基于CGLIB实现的动态代理。Java的反射机制是指在程序的运行状态中,可以构造任意一个类的对象,可以调用任意对象的属性和方法。就二者的效率来说,大部分情况都是JDK动态代理更优秀,随着JDK版本的升级,这个优势更加明显。

2023-09-20 23:22:29 36

原创 Java语言04之泛型

Java泛型是JDK 5中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型包括泛型类、泛型接口、泛型方法。Java的泛型是伪泛型,这是因为Java在运行期间,所有的泛型信息都会被擦掉,这也就是通常所说的类型擦除。不管为泛型的类型形参传入哪一种类型实参,对于Java来说,它们依然被当成同一个类处理,在内存中也只占用一块内存空间,因此在静态方法、静态初始化块或者静态变量的声明和初始化中不允许使用类型形参。换句话说,Java并不存在泛型类!Java提供的泛型只

2023-09-19 21:51:21 51

原创 Java语言03之集合体系

这其实是一个数学计算上的优化,如果HashMap的长度是2的n次方,那么与key的hash值对长度取余的操作等价于key的hash值与长度减一的与操作,可以加快计算速度。如果长度为2的幂次方,则长度减一转化为二进制必定是11111……的形式。

2023-09-18 21:48:34 61

原创 Java语言02之面向对象编程

首先,实际保存字符串内容的value[]数组被final修饰且为private的,并且String类没有提供修改这个字符串的方法。其次,String类被final修饰导致其不能被继承,进而避免了子类破坏String的不可变。

2023-09-17 14:36:27 27

原创 Java语言01之基础语法

数组引用变量只是一个引用,这个引用变量可以指向任何有效的内存,只有当该引用指向有效内存后,才可通过该数组变量来访问数组元素。在存储的过程中,由于浮点数存储空间不足,无限循环只能被截断,就会导致浮点数精度发生损失的情况。一旦为数组的每个数组元素分配了内存空间,每个内存空间里存储的内容就是该数组元素的值,即使这个内存空间存储的内容是空,这个空也是一个null值。增强for循环中的循环变量相当于一个临时变量,系统会把数组元素依次赋给这个临时变量,而这个临时变量并不是数组元素,它只是保存了数组元素的值。

2023-09-16 23:33:04 49

空空如也

空空如也

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

TA关注的人

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