随笔分类 - 并发
摘要:接口和抽象类的区别? 重载和重写的区别? 重载,方法名称不变,入参改变,是一个新的方法,增强同一个方法名称的能力范围,比如LoggerFactory中的getLogger()方法,有多个重载方法,都可以通过getLogger拿到日志对象。 重写,类的继承因为开闭原则,不建议重写,主要针对接口,是对一
阅读全文
摘要:不扯概念,直接看代码: 以可重入锁ReentrantLock的lock()方法切入 Sync是ReentrantLock的一个抽象的静态内部类,同时继承了AbstractQueuedSynchronizer也就是我们常说的AQS,同步队列,源码上的解释太长了,这个抽象类的作用,就是维护一个双向链表,
阅读全文
摘要:volatile:解决多线程场景的可见性问题 可见性问题:多线程的情况下,对于共享变量的读取,不一定是最新的值,就是可见性的问题 场景:多核cpu中,每个内核存在自己的高速缓存,线程的读取都是先从高速缓存中直接读取,读取不到才去内存中读取,优化了io开销过大,提升服务器性能,这是cpu的内存模型设计
阅读全文
摘要:synchronized:互斥锁,本质是通过锁定共享资源,达到线程安全的手段 根据使用方式,分为类锁和对象锁 修饰在静态方法,或者参数为class类的时候,都是以当前类作为共享资源进行锁定,为类锁,粒度最大。 修饰在实例方法,或者参数为指定对象实例的时候,已指定实例为共享资源进行锁定,为对象锁 锁的
阅读全文
摘要:线程的基本概念: 线程可以理解成一个轻量的进程,是cup的最小执行单元,所以线程的创建,是操作系统os实现的,java虚拟机只是调用,这一点和数据库的事务一样。 并发和并行 并发,就是日常提到的高并发,指Server可以同时接收多个请求 并行,一个单核cpu也是可以通过资源切换达到并发,但是始终只有
阅读全文