摘要: 关于Java中的GC,简单来说就是垃圾收集器自动回收生命周期结束的对象,释放内存。 那么怎样确定对象是否存活呢? 可达性分析算法 现在主流的Java虚拟机大多使用这种可达性分析算法来判断对象是否需要进行垃圾回收。具体也就是,从GC Roots出发,向下搜索,形成一个完整的对象引用链。当某个对象没有任 阅读全文
posted @ 2019-02-24 11:49 阳光、大地和诗歌 阅读(397) 评论(0) 推荐(0) 编辑
摘要: 对比JDK1.7,JDK1.8在运行时的内存分配上进行了调整。本篇对JDK1.8版本进行简要介绍。 先以一张图片描述运行时内存: 程序计数器 记录当前线程执行的字节码行号。如果执行的是native方法,值为null。 虚拟机栈 每一个线程执行时,都对应有一个虚拟机栈,生命周期与线程相同。一个虚拟机栈 阅读全文
posted @ 2019-02-22 22:39 阳光、大地和诗歌 阅读(2643) 评论(0) 推荐(0) 编辑
摘要: Semaphore用于管理信号量,在并发编程中,可以控制返访问同步代码的线程数量。Semaphore在实例化时传入一个int值,也就是指明信号数量。主要方法有两个:acquire()和release()。acquire()用于请求信号,每调用一次,信号量便少一个。release()用于释放信号,调用 阅读全文
posted @ 2019-02-19 21:54 阳光、大地和诗歌 阅读(5463) 评论(0) 推荐(0) 编辑
摘要: 生产环境中,存在需要等待多个线程都达到某种状态后,才继续运行的情景。并发工具CyclicBarrier就能够完成这种功能。本篇从源码方面,简要分析CyclicBarrier的实现原理。 使用示例 执行结果如下: 可以看到线程1,2,3在同一个时间结束。 源码分析 主要成员: CyclicBarrie 阅读全文
posted @ 2019-02-16 22:27 阳光、大地和诗歌 阅读(1222) 评论(0) 推荐(0) 编辑
摘要: Object类中的wait(),notify()和notifyAll()可以实现线程的等待通知模型,同样在ReentrantLock中可以借助Condition来完成这种机制。本篇就简要介绍Condition的工作原理。 先看一下Condition的使用示例: 这段代码的输出为: 等待时间大概为10 阅读全文
posted @ 2019-02-16 11:37 阳光、大地和诗歌 阅读(512) 评论(0) 推荐(0) 编辑
摘要: CountDownLatch的作用类似于Thread.join()方法,但比join()更加灵活。它可以等待多个线程(取决于实例化时声明的数量)都达到预期状态或者完成工作以后,通知其他正在等待的线程继续执行。简单的说,Thread.join()是等待具体的一个线程执行完毕,CountDownLatc 阅读全文
posted @ 2019-02-15 16:43 阳光、大地和诗歌 阅读(246) 评论(0) 推荐(0) 编辑
摘要: ThreadLocal,即线程局部变量,用来为每一个使用它的线程维护一个独立的变量副本。这种变量只在线程的生命周期内有效。并且与锁机制那种以时间换取空间的做法不同,ThreadLocal没有任何锁机制,它以空间换取时间的方式保证变量的线程安全。 本篇从源码方面分析ThreadLocal的实现原理。 阅读全文
posted @ 2019-02-15 14:34 阳光、大地和诗歌 阅读(1664) 评论(0) 推荐(1) 编辑
摘要: 线程属于稀缺资源,对于线程的创建规则,引用《阿里巴巴 Java 手册》中的一条进行说明。 本篇从源码方面介绍ThreadPoolExecutor对象,并简要解析线程池工作原理。 首先ThreadPoolExecutor中定义了几个线程池状态常量。 RUNNING是运行状态,线程池可以接收新任务 SH 阅读全文
posted @ 2019-02-01 22:41 阳光、大地和诗歌 阅读(657) 评论(0) 推荐(0) 编辑
摘要: 在java并发包java.util.concurrent中,除了重入锁ReentrantLock外,读写锁ReentrantReadWriteLock也很常用。在实际开发场景中,在使用共享资源时,可能读操作远远多于写操作。这种情况下,如果对这部分共享资源能够让多个线程读的时候不受阻塞,仅仅在写的时候 阅读全文
posted @ 2019-02-01 14:28 阳光、大地和诗歌 阅读(484) 评论(0) 推荐(0) 编辑
摘要: 为了保证同步的安全性,除了synchronized关键字,java并发包中java.util.concurrent.locks中的ReentrantLock和ReentrantReadWriteLock也是常用的锁实现。本篇从源码方面,分析一下重入锁ReentrantLock的原理。 先说一下什么的 阅读全文
posted @ 2019-01-30 22:57 阳光、大地和诗歌 阅读(1232) 评论(0) 推荐(0) 编辑