自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(5)
  • 收藏
  • 关注

原创 volatile解决可见性,但是不能保证线程安全

violate只能保证A线程改变变量i的时候会立即写入到共享内存中,然后告诉其它内存,你们各个线程的工作内存的变量已经被我改了,你们要重新去共享内存读取,但是i++的操作不是一个原子操作,i++的操作是读取i的值,然后+1,写回共享内存,。如果A线程在读取i的值之后还没写入到共享内存,然后cpu被抢夺,执行B线程,这时候B线程也执行i++,B去读取i的值,然后B将i+1,并写回内存,然后cpu又被抢夺执行A,但是这时候A线程因为已经读取了i的值,所以i+1,然后写回内存,两个线程写回了同一个值i只+1而不是

2020-09-16 10:31:41 1032

原创 spring解决循环依赖的原理——构造注入除外

先说结论,spring通过三级缓存机制来解决循环依赖问题,构造器依赖除外,即构造器注入可能会报错。循环依赖的情况如下:首先spring初始化bean的步骤如下:这里只需要简单的理解为三步:实例化 填充属性(注入依赖) 初始化完成spring在创建Bean A的时候会先去一级缓存(singletonObjects),如果一级缓存没有则再从二级缓存(earlySingletonObjects)中获取,如果二级缓存也没有,则再从三级缓存(singletonFactories)中获

2020-09-15 20:59:06 753

原创 IDEA不能折叠JavaScript代码

我的idea更新到2020.2之后突然发现.vue文件(也包括.js文件)中的js代码无法折叠,只能折叠整个<script>标签,通过和idea官方沟通过后发现是因为我安装了leetcode editor(6.7版本)插件导致的。禁用并重启之后,js代码可以被正常折叠/展开,暂时没有测试具体是因为idea更新到2020.2之后触发的bug,还是leetcode editor更新到6.7的问题。...

2020-08-12 15:36:15 1662 12

原创 多线程爬虫,数据为什么不会混乱?

最近在写一个爬虫项目,启动了多个线程去爬取网站的公开数据(这里说一下,多线程爬虫对被爬取的网站压力比较大,可能会导致目标网站被搞崩溃,所以最好注意一下不要起太多线程,而且也容易被反爬虫拦截封锁IP),但是有个疑问就是,我多个线程去爬取数据,目标网站返回的响应为什么不会产生混乱呢,比如ABC三个线程去请求数据,结果A线程的响应返回给了B线程,B线程的响应又返回给了C线程。所以看了一下TCP协议的博客,写下这篇文章。首先,我的爬虫程序是用Java写的,用httpclient发请求,而http是在tcp的基础

2020-06-10 15:13:15 819

原创 sleep不会释放锁,但是会让出cpu执行权

A线程调用sleep方法不会释放锁,所以其它和A线程一起持有一把锁的A1、A2线程就不会执行,但是另外的线程不需要持有这把锁的线程是可以被cpu执行的,例如主线程,B1、B2线程。 sleep和wait方法的区别就是sleep不会释放锁,当睡眠的时间到了之后,线程会自动进入可执行状态,等待cpu的执行。而wait方法会释放锁(所以前提就是线程在执行wait方法之前必须要获得锁,也就意味着只能在同步方法或者同步代码块中调用wait方法),释放锁之后,必须要有另外线程执行notify或者notifyA.

2020-06-03 15:58:29 6314 4

空空如也

空空如也

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

TA关注的人

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