随笔分类 -  JAVA

摘要:AQS介绍 AQS,即AbstractQueuedSynchronizer, 队列同步器,它是Java并发用来构建锁和其他同步组件的基础框架。 AQS的核心思想是基于volatile int state这样的一个属性同时配合Unsafe工具对其原子性的操作来实现对当前锁的状态进行修改。当state的 阅读全文
posted @ 2018-03-20 17:24 涛声依旧~ 阅读(196) 评论(0) 推荐(0)
摘要:生产者消费者模型 生产者消费者模型具体来讲,就是在一个系统中,存在生产者和消费者两种角色,他们通过内存缓冲区进行通信,生产者生产消费者需要的资料,消费者把资料做成产品。生产消费者模式如下图。 举例说明: 生产者消费者模型实现 生产者是一堆线程,消费者是另一堆线程,内存缓冲区可以使用List数组队列, 阅读全文
posted @ 2018-03-20 14:05 涛声依旧~ 阅读(352) 评论(0) 推荐(0)
摘要:1. 当synchronized修饰一个static方法时,多线程下,获取的是类锁(即Class本身,注意:不是实例),作用范围是整个静态方法,作用的对象是这个类的所有对象。 2. 当synchronized修饰一个非static方法时,多线程下,获取的是对象锁(即类的实例对象),作用范围是整个方法 阅读全文
posted @ 2018-03-18 00:40 涛声依旧~ 阅读(5975) 评论(0) 推荐(0)
摘要:虽然jvm可以通过GC自动回收无用的内存,但是代码不好的话仍然存在内存溢出的风险。 一、为什么要了解内存泄露和内存溢出? 1、内存泄露一般是代码设计存在缺陷导致的,通过了解内存泄露的场景,可以避免不必要的内存溢出和提高自己的代码编写水平; 2、通过了解内存溢出的几种常见情况,可以在出现内存溢出的时候 阅读全文
posted @ 2018-03-17 16:26 涛声依旧~ 阅读(680) 评论(0) 推荐(0)
摘要:1. final 在java中,final可以用来修饰类,方法和变量(成员变量或局部变量)。下面将对其详细介绍。 1.1 修饰类 当用final修饰类的时,表明该类不能被其他类所继承。当我们需要让一个类永远不被继承,此时就可以用final修饰,但要注意: final类中所有的成员方法都会隐式的定义为 阅读全文
posted @ 2018-03-17 01:01 涛声依旧~ 阅读(109968) 评论(3) 推荐(19)
摘要:基础概念 synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时可以保证共享变量对内存可见性。 Java中每一个对象都可以作为锁,这是synchronized实现同步的基础: 当一个线程访问同步代码块时,它首先是需要得到锁才能执行同步代码,当退出或者抛出异 阅读全文
posted @ 2018-02-19 19:39 涛声依旧~ 阅读(251) 评论(0) 推荐(0)
摘要:基本概念 java提供了一个 “对象序列化框架”,可以将 “对象” 编码为 “字节流”,这个过程称之为 “序列化”。反之 也可以从“字节流”编码中重新构建成一个新的对象,这个过程称之为“反序列化”。一旦一个对象被序列化后,就可以通过网络从一台服务器传输到另一台服务器,再进行存储或者反序列化后使用。这 阅读全文
posted @ 2018-02-18 22:38 涛声依旧~ 阅读(160) 评论(0) 推荐(0)
摘要:1. 设计线程安全的类 在设计线程安全类的过程中,需要包含以下三个基本要素: ·找出构成对象状态的所有变量 找出约束变量的不变性条件 建立对象状态的并发访问管理策略 示例1: 使用Java监视器模式的线程安全计数器 2. 实例封闭 一种避免使用同步的方式就是不共享数据。如果仅在单线程内访问数据,就不 阅读全文
posted @ 2018-02-03 19:08 涛声依旧~ 阅读(348) 评论(0) 推荐(0)
摘要:这里要讨论这些常用的默认初始容量和扩容的原因是: 当底层实现涉及到扩容时,容器或重新分配一段更大的连续内存(如果是离散分配则不需要重新分配,离散分配都是插入新元素时动态分配内存),要将容器原来的数据全部复制到新的内存上,这无疑使效率大大降低。 加载因子的系数小于等于1,意指 即当 元素个数 超过 容 阅读全文
posted @ 2017-09-21 19:55 涛声依旧~ 阅读(347) 评论(0) 推荐(0)