自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

秋夫人

如果说努力和拼尽全力之间有什么区别,那就是,当你努力的时候,你会觉得自己已经拼尽全力了。当你拼尽全力的时候,你会觉得自己还不够努力。

  • 博客(18)
  • 收藏
  • 关注

原创 J.U.C-FutureTask

Callable 与Runnable 接口对比Runnable 是个接口,只有一个方法run(),实现Runnable的run(),把要实现的逻辑写到run()中,然后启动线程就行;Callable 代码也很简单,不同的是,Callable 是个泛型接口,call(),返回类型是传入的泛型,Callable 与Runnable大致相似,Callable 功能更强大写,主要是Callable...

2019-01-18 12:18:53 236

原创 J.U.C之AQS之 ReentrantLock与synchronize区别、ReentrantReadWriteLock、StampedLock

J.U.C之AQS之ReentrantLock与锁ReentrantLock(可重入锁) 与synchronize 区别(1)、可重入性ReentrantLock与synchronize 都具有可重入性,就是同一个线程已经获得了锁,可以再多次获取当前锁,解锁次数要与加锁次数相同,才能释放锁。(2)、锁的实现ReentrantLock 是通过JDK 实现的,synchronize 是JV...

2019-01-17 18:39:13 578

原创 Leetcode - java - 24. 两两交换链表中的节点

题目给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.说明:你的算法只能使用常数的额外空间。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。解题(1)、用时 4ms/** * Definition for singly-linked list. * ...

2019-01-17 14:04:02 489

原创 Leetcode - java - 206.反转一个单链表 - 图解

题目:反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2-&amp

2019-01-17 12:01:08 797

原创 J.U.C之AQS之 CountDownLatch、Semaphore、CyclicBarrier

J.U.C之AQS - 介绍J.U.C(java.util.concurrent)在jdk1.5引入,引入J.U.C大大提高了java的并发性能,AQS(AbstractQueuedSynchronizer的缩写) 可以认为是J.U.C的核心,AQS 可以说是并发类中的重中之重,AQS 提供了基于firstIn,firstOut队列,这个队列可以用来构建锁或者其他相关的同步装置的基础框架 A...

2019-01-16 19:17:11 347

原创 并发容器及安全共享策略总结

并发容器及安全共享策略总结J.U.C指的java.util.concurrent包并发容器 - CopyOnWriteArrayListCopyOnWriteArrayList 相比ArrayList 是线程安全的,根据名称知道:写操作时复制;写操作时拷贝一份,在新的数组上进行写操作,操作完之后,再将原来的数组指向新的数组。(CopyOnWriteArrayList整个add操作都是在...

2019-01-16 11:59:55 345

原创 同步容器

线程安全 - 同步容器同步容器 - VectorVector 不是线程安全的执行结果:报错,原因:当一个线程remove(i)时,同时另一个线程get(j), i=j,此时就回报错Vector 遍历同步容器或者普通容器中,test1(),test2(),方法都会抛异常,因为在遍历时进行了移除操作,如果要移除Vector元素,可以先做标识,遍历完之后再进行移除,也推荐直接用fo...

2019-01-16 09:28:48 217

原创 线程不安全类与写法

线程不安全类什么是线程不安全的类:如果一个类的对象可以同时被多个对象访问,如果不做特殊的同步或者并发的处理,就会很容易表现出线程不安全的现象,比如抛出异常,逻辑处理错误等等StringBuilder执行结果:499049984993线程不安全的StringBuffer执行结果:500050005000线程安全的SimpleDateFormat执行结果:不是线...

2019-01-15 18:44:10 344

原创 线程封闭 - threadLocal简单用法

线程封闭把对象封装到一个线程里,只有这一个线程能看到这个对象。所以即使这个对象不是线程安全的,也不会出现线程安全的问题了。创建类RequestHolder,定义一个静态成员变量ThreadLocal requestHolder = new ThreadLocal<>();并定义三个方法,add(),getId(),remove(),分别表示想requestHolder 中添...

2019-01-15 15:29:47 357

原创 不可变对象 final、 Collections.unmodifiable、guava的 Immutable**

可以采用的方式包括:1、将类声明为final,这样就不能继承了2、将所有成员声明为私有的,这样就不允许直接访问这些成员3、对变量不提供set方法,将所有可变成员声明为final,这样只能赋值一次4、通过构造器初始化所有成员,进行深度拷贝,在get方法中不返回对象本身,而是返回克隆对象,即对象的深度拷贝finalfinal类不能被继承,参考Stringfinal基本数据类型变量赋值...

2019-01-14 21:02:32 449

原创 安全发布对象 - 四种方法 单例模式

执行结果:执行结果:

2019-01-14 20:06:06 1134

原创 安全发布对象 - 发布与逸出

安全发布对象 - 发布与逸出发布对象:使一个对象能够被当前范围之外的代码所使用对象溢出:一种错误的发布,当一个对象还没有构造完成时,就使他被其他线程所见发布对象这段代码通过public getStates()访问级别发布了类的域states,在类的任何外部线程都可以访问这个域,这样的发布对象是不安全的,因为我们无法保证其他线程是否回对这个域进行修改。从而造成类里面的域的状态错误。(不推...

2019-01-14 14:49:07 217 1

原创 线程安全性 - 有序性及总结

线程安全性 - 有序性有序性 - happens-before原则(先行发生原则)Java内存模型具有先天的有序性,不通过任何手段,就能得到保证的有序性,称为happens-before原则。如果两个操作的执行顺序无法从本原则推测出来,虚拟机将可随意地对其进行重排序。Java内存模型中,允许编译器和处理器对指令进行重排序,但是重排序过程不会影响到单线程程序的执行,却会影响到多线程并发执行的...

2019-01-14 13:48:25 2412

原创 线程安全性 - 可见性volatile

线程安全性 - 可见性可见性 - synchronize可见性 - volatilevolatile可见性的实现:通过内存屏障和禁止重排序优化来实现;1.volatile变量写操作时,会插入一条store屏障指令(StoreStore和storeLoad),将本地内存中的共享变量值刷新到主内存; (store,load是jmm 指令,参考:https://blog.csdn.net...

2019-01-14 09:51:31 281

原创 java内存模型JMM

java内存模型jmm(java memory model)规范,他规范了java虚拟机与计算机内存如何协调工作 ,他规定了一个线程如何及何时看到其他线程修改过的变量的值,以及在必须时,如何同步的访问共享变量。jmm内存分配的概念:堆heap: 优点:运行时数据区,动态分配内存大小,有gc;,缺点:因为要在运行时动态分配,所以存取速度慢,对象存储在堆上,静态类型的变量跟着类的定义一起存储在...

2019-01-14 09:21:16 23200 4

原创 线程安全性 - 原子性 - 锁 synchronize

原子性 - 锁原子性:互斥性。能保证同一时刻只有一个线程操作的,除了atomic包内的类,另个锁。锁:synchronized, 锁关键字,依赖jvm实现,这个关键字作用对象的作用范围内,同一时刻只能有一个线程操作的,Lock:依赖特殊的cpu指令,代码实现,ReentrantLocksynchronizedsynchronized同步锁,修饰4中对象(1)修饰一个代码块,被修饰...

2019-01-12 15:44:44 674

原创 并发模拟代码 - CountDownLath、Semaphore

CountDownLatch当前计数器的值为3;线程a 调用了await()方法后,当前线程进入等待状态awaiting;其他线程每次执行countDown()方法时,计数器就会减一,比如:线程1调用countDown()方法,计数器值为2,然后不停的执行,只到计数器为0时,线程a 才继续执行。如图:我们可以看出CountDownLatch是java自带计数器,这个类可以阻塞线...

2019-01-11 11:48:22 311

原创 ApacheBench(ab)压力测试工具,安装,用法,参数说明

一、Apache Bench简介ApacheBench 是 Apache 服务器自带的一个web压力测试工具,简称ab。ab又是一个命令行工具,对发起负载的本机要求很低,根据ab命令可以创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问,因此可以用来测试目标服务器的负载压力。总的来说ab工具小巧简单,上手学习较快,可以提供需要的基本性能指标,但是没有图形化结果,不能监控。二、A...

2019-01-10 21:59:52 2946

Scala入门教程文档

Scala入门教程文档,原视频地址:https://www.bilibili.com/video/BV1Q5411t74z/?spm_id_from=333.337.search-card.all.click&vd_source=9d8a366730d0394fa41e3b867372fc03

2023-10-02

空空如也

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

TA关注的人

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