Java
文章平均质量分 69
hexiaosa91
这个作者很懒,什么都没留下…
展开
-
并发编程 —— Java 线程安全相关
线程不安全的原因 正是有了多线程,才会出现线程不安全。线程不安全的原因就是多个线程某段代码不具备原子性、可见性或有序性导致的。 原子性是指一个操作是不可被其它线程打断的,加锁就是保证了原子性。 可见性是一个线程修改了某个共享值,其它线程能立即可知,不会出现一个线程修改了某个值,另一个线程读到旧值的情况。使用 volatile 就可以保证可见性。 有序性是由于编译器会进行指令重排序,当不同线程...原创 2018-08-03 17:52:42 · 134 阅读 · 0 评论 -
JVM 垃圾回收
Java 内存模型 Java 内存模型分为 5 个部分,程序计数器,虚拟机栈,本地方法栈,堆,方法区 程序计数器:线程私有,每个线程都有自己的程序计数器,指向正在执行的字节码地址。这个内存区也是 Java 内存模型中唯一一个不会发生内存溢出的区域。 虚拟机栈:线程私有,方法的执行都会涉及到虚拟机栈的入栈出栈操作。包含局部变量表、操作数栈、动态连接栈,局部变量表保存方法参数和方法内部变量,对于...原创 2018-08-13 22:33:13 · 127 阅读 · 0 评论 -
Java 类的加载
类的加载过程 加载 将 .java 文件转成二进制流 将类信息存入方法区 在方法区中生成一个 Class 对象,用于访问该类的接口 PS: 读取到二进制流的来源,常见的有:ZAR包,运行中动态计算(动态代理),其它文件生成(JSP) 验证 验证过程是为了防止恶意代码破坏虚拟机而进行验证的过程。 1. 文件格式验证:该过程是针对二进制流进行的,只有通过了该验证,二进制流才可以进...原创 2018-09-05 23:16:10 · 100 阅读 · 0 评论 -
并发编程 —— CountDownLatch 讲解
CountDownLatch 介绍 CountDownLatch 是用于等待线程的执行,等待线程数量为 0 后,则结束等待,执行该线程等待后所要执行的代码。 例子如下: private static CountDownLatch caDownLatch = new CountDownLatch(2); public static void main(String[] args) { new T...原创 2018-10-27 11:12:56 · 138 阅读 · 0 评论 -
并发编程 —— CyclicBarrier 讲解
CyclicBarrier 介绍 CyclicBarrier 是用于阻塞固定数量的线程,数量达到时就继续这些线程的执行,并可以指定继续执行这些线程之前执行 Runnable, 这个 Runnable 是在到达临界数量的那个线程执行的。 例子如下: private static CyclicBarrier caBarrier = new CyclicBarrier(3, new Runnable()...原创 2018-10-27 11:13:44 · 177 阅读 · 0 评论 -
并发编程 —— 线程池简介和源码分析
线程池简介 线程池的优点:提高性能,提高线程的利用率,可控制线程的最大并发数,方便线程管理。 线程池的核心类是 ThreadPoolExecutor, 可通过 Executors 中的几个方法创建线程池,分别是: CachedThreadPool 核心线程数为 0, 线程数量无上限 FixedThreadPool 核心线程数由使用者自己指定,无非核心线程,线程空闲时不会被回收,除非线程池被...原创 2018-11-18 21:36:56 · 323 阅读 · 0 评论