J2SE
bobshute
这个作者很懒,什么都没留下…
展开
-
并发编程9-公平锁&ReentrantReadWriteLock&StampedLock
1.公平锁/非公平锁1.1 公平锁概述公平是针对锁的获取而言的,如果一个锁是公平的,那么锁的获取顺序就应该符合请求的绝对时间顺序。ReentrantLock、ReadWriteLock默认都是非公平模式,非公平锁的效率高于公平锁(不浪费的线程切换).1.2 自写公平锁FairLock,QueueObjectimport java.util.ArrayList;import java....原创 2019-02-16 23:26:20 · 349 阅读 · 0 评论 -
并发编程7-Lock接口和自写可重入Lock
1.Lock概述1.1 java.util.locks.Lock1.2 Lock接口解释JDK.5后出现void lock() 获取锁void unlock() 释放锁void lockInterruptibly() 加锁过程中进行抢占锁的时候发生中断 ,并抛出异常boolean tryLock() 非阻塞的获取锁1.2 实现类Reentran...原创 2019-02-11 23:57:28 · 185 阅读 · 0 评论 -
并发编程8-AQS&ReentrantLock源码及应用
1.AQS 概述AQS(AbstractQueuedSynchronizer)抽象的队列式的同步器,模板方法.AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch1.1 JDK文档说明JDK在线文档地址为实现依赖于先进先出 (FIFO)等待队列的阻塞锁和相关同步器(信号量、事件,...原创 2019-02-12 23:45:32 · 208 阅读 · 0 评论 -
并发编程10-线程安全及锁总结
1.概要总结1.1. 大纲总结出现线程安全性问题的条件在多线程的环境下必须有共享资源对共享资源进行非原子性操作解决线程安全性问题的途径synchronized (偏向锁,轻量级锁,重量级锁)volatileJDK提供的原子类使用Lock(共享锁,排它锁)1.2. 线程总结出现线程安全性问题的条件在多线程的环境下必须有共享资源对共享资源进行非原子性...原创 2019-03-03 23:33:04 · 135 阅读 · 0 评论 -
并发编程11-wait,notify
1.wait,notify概述目的是实现线程通信wait和notify都需要放在synchronized(方法和代码块都行)中.在碰到wait之后,synchronized就被释放了.notify叫醒一个线程,notifyAll会叫醒多个线程(一个个的进行),可以通过Jconsole来查看wait的线程2.示例2.1 在不用wait,notify的情况下实现线程通信/** ...原创 2019-03-09 23:40:45 · 126 阅读 · 0 评论 -
并发编程12-Condition
1.概述1.1 简介java condition使用及分析java中条件变量都实现了java.util.concurrent.locks.Condition接口,条件变量的实例化是通过一个Lock对象上调用newCondition()方法来获取的,这样条件就和一个锁对象绑定起来了。Java中的条件变量只能和锁配合使用,来控制并发程序访问竞争资源的安全。[条件变量和锁需配合使用]Co...原创 2019-03-10 23:31:10 · 144 阅读 · 0 评论 -
并发编程14-ThreadLocal
1.概述线程的局部变量, 每个线程自己独立隔离开来,线程之间的数据不共享,所以不会有数据安全性问题.ThreadLocal,很多地方叫做线程本地变量,也有些地方叫做线程本地存储,其实意思差不多。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。2.示例public class ThreadLocalTest { private T...原创 2019-03-16 23:01:06 · 111 阅读 · 0 评论 -
并发编程13-join
https://blog.csdn.net/chenkaibsw/article/details/809128781.概述join方法的主要作用就是同步,它可以使得线程之间的并行执行变为串行执行2.示例thread.join();thread.join(long millis); //等待millis时间后串行变成继续并行.public class JoinThreadTest...原创 2019-03-12 23:47:35 · 178 阅读 · 0 评论 -
并发编程15-并发工具
1.CountDownLatch1.1 概述1.1.1 简述CountDownLatch的构造函数入参有N(int类型)个作为计数器;然后起多子线程,子线程countDownLatch.countDown后计数-1;主线程countDownLatch.await();待计数为0后主线程countDownLatch.await()后面继续执行.CountDownLatch latch ...原创 2019-04-07 23:39:49 · 158 阅读 · 0 评论 -
并发编程16-Callable,FutureTask
1.概述通过实现Callback接口,并用Future可以来接收多线程的执行结果Future表示一个可能还没有完成的异步任务的结果,针对这个结果可以添加Callback以便在任务执行成功或失败后作出相应的操作。2.示例2.1 核心代码Callable<Integer> call = new Callable<Integer>(); FutureTask&l...原创 2019-04-14 23:29:02 · 185 阅读 · 0 评论 -
并发编程18-Fork,Join框架
1.Fork、Join1.1概述1.1 简介Fork/Join框架是用于并行执行任务的框架,一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。Fork/Join Pool采用优良的设计、代码实现和硬件原子操作机制等多种思路保证其执行性能多线程的目的不仅仅是提高程序运行的性能,但是可以充分利用CPU资源1.1.2 原理第一步分割任务。首先我们需要有一...原创 2019-05-03 23:36:05 · 124 阅读 · 0 评论 -
并发编程19-ThreadPoolExecutor(线程池)和Executors框架
文章目录1. 线程池概述2. 创建一个线程池并提交线程任务3. 线程池源码解析3.1 参数认识3.2 构造方法3.3 内部类Worker3.4 提交任务3.4.1 addWorker3.5 执行任务3.6 关闭线程池4. Executors4.1 newCachedThreadPool4.2 newFixedThreadPool4.3 newScheduledThreadPool4.4 new...原创 2019-05-03 23:54:27 · 168 阅读 · 0 评论 -
并发编程17-同步容器与并发容器和阻塞队列
0.总述1.同步容器1.1 概述Vector 线程安全 用的add方法synchronized,如果是并发编程时也是单线程的.但是当多线程的时候由于有锁,性能降低,所以在并发情况下不会用Vector…ArrayList 线程不安全底层用数组存数据,当添加的数据数目到一定程度,则将当前数据复制到一个更大的新的数组中.Collections.synchronizedList(Arra...原创 2019-04-28 23:45:47 · 289 阅读 · 0 评论 -
并发编程20-并发总结
1.基础1.1 优缺点、目的死锁、饥饿线程安全数据共享1.2 线程和进程1.3 实现方式继承实现匿名内部Callable定时器线程池@Async1.4 线程状态1.5 优先级1.6 Thread常用函数startrunsetPrioritysleepwait、notify、notifyAlljoinsetDemonyieldinterru...原创 2019-05-08 23:47:38 · 154 阅读 · 0 评论 -
并发编程6-原子类Atomic和LongAddr
1 Atomic原子类概述JDK1.5开始出现1.1 Atomic原子类分类1 原子更新基本类型2 原子更新数组3 原子更新抽象类型4 原子更新字段1.2 Atomic原子类所在位置2.Atomic原子类代码演示import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.ato...原创 2019-02-02 23:45:14 · 590 阅读 · 0 评论 -
并发编程5-单例
1.单例模式1.1 线程安全问题条件多线程的环境下必须有共享资源对资源进行非原子性操作1.2 饿汉式单例模式/** 饿汉式单例模式-不会出现线程安全模式 */public class SingletonHunger { // 私有化构造方法 private SingletonHunger () {} //类加载时就产生了instance对象 private st...原创 2019-01-19 23:18:19 · 102 阅读 · 0 评论 -
并发编程4-volatile
1.单例模式1.1 线程安全问题条件多线程的环境下必须有共享资源对资源进行非原子性操作1.2 饿汉式单例模式/** 饿汉式单例模式-不会出现线程安全模式 */public class SingletonHunger { // 私有化构造方法 private SingletonHunger () {} //类加载时就产生了instance对象 private st...原创 2019-01-12 23:58:01 · 185 阅读 · 0 评论 -
JSE3-类特性-继承,覆盖,多态,static,内部类
1.继承1.1 概述extends关键字用来继承子类拥有父类所有变量及方法单继承性: 父亲唯一,单继承性使代码更可靠。接口会提供多继承性的好处,而且没有(多继承的)缺点。 ==构造方法不能被继承====初始化子类必先初始化父类==1.2 super及调用父类构造方法super用来引用最近的父类的成员变量或方法,且能==自动向上层父类追溯==;还可作为方法名表示...原创 2018-02-20 23:00:34 · 297 阅读 · 0 评论 -
JSE1-基础概念
1 Java 简介1.1 概述Java 分成三种版本Java 标准版(JSE Java Standard Edition)Java 微缩版(JME Java Micro Edition)Java 企业版(JEE Java Enterprise Edition)Java 标准组织: JCP(Java Community Process) 主要职能是发展和更新 Java 技术规...原创 2018-02-18 23:03:04 · 525 阅读 · 0 评论 -
JVM2-垃圾回收-回收算法,收集器
1 垃圾回收-概述1.1 如何判断对象为垃圾对象引用计数法可达行分析法1.2 如何回收垃圾回收策略标记-清除算法复制算法标记-整理算法分代收集算法垃圾回收器SerialParnewCmsG11.3 何时回收2 垃圾回收-判断对象是否存活算法打印垃圾回收日志-verbose:gc -xx:+PrintGCDetail (Ru...原创 2018-07-28 23:29:27 · 708 阅读 · 0 评论 -
JVM4-工具使用
1 虚拟机工具介绍系统定位问题:知识和经验是基础,数据是依据,工具是运用知识处理书的手段. D:\Program Files\Java\jdk1.8.0_92\bin\jps,jstat,jstack等 工具都很小,是因为引用了tools.jar包(D:\Program Files\Java\jdk1.8.0_92\lib\tools.jar)中的内容. 在tools.jar中bin下的...原创 2018-09-09 00:00:10 · 593 阅读 · 0 评论 -
JVM5-class文件结构
1.Class文件1.1 Class文件简介和发展历史javac编译java文件class 二进制查看CA FE BA BY开头(魔数).class的规范从第1版到第8版改动很小.1.2 Class文件结构概述1.2.1 概述理解下CA FE BA BE:字符C为16进制(4位,0~15),CA(2个4位,8位,1个字节). 是无符号数.Class文件是一组以8位字节为基础单位的...原创 2018-10-02 23:17:35 · 378 阅读 · 0 评论 -
JVM6-字节码指令
1.字节码指令1.字节码总述字节码格式字节吗指令类加载机制字节码执行引擎1.2 字节码指令简介字节码中的方法表,方法表中存储的是方法的摘要信息,方法体存储在属性表(arrtibute_info)中的code中.Java虚拟机的指令由一个字节长度的,代表着某种特定操作含义的数字(操作码 Opcode),以及跟随其后的零至多个代表此操作所需参数的参数(操作数 Operand...原创 2018-10-21 23:44:10 · 350 阅读 · 0 评论 -
JSE4-抽象类接口
1. 抽象类1.1:抽象类概述使用 abstract 修饰符来表达抽象。abstract可以修饰类或方法:被修饰的类不能被实例化,被修饰的方法必须在包含此方法的类的子类中被实现。抽象方法:只给出方法定义而不具体实现的方法,抽象方法是没有方法体的,在代码没有“{}”。但是不能有抽象构造方法或抽象静态方法。抽象类: 如果一个类含有抽象方法,则称这个类为抽象类,也使用abstract...原创 2018-02-21 23:19:28 · 628 阅读 · 0 评论 -
JVM7-类加载
1 类加载机制概述虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。懒加载:java虚拟机加载策略是懒加载的.(用的时候再加载)相对应的是即时加载:懒加载和预加载多线程下单例模式:懒加载(延迟加载)和即时加载 2 类加载时机2.1 类的生命周期1.加载(Loading)2.连接(...原创 2018-10-27 23:42:09 · 183 阅读 · 0 评论 -
JVM8-虚拟机字节码执行引擎
1.虚拟机字节码执行引擎1.1 运行时栈帧结构之前我们已经了解了有这么个区域,而且已经知道有栈帧这么一个结构。那么我们就从方法执行的角度来剖析栈帧。1.1.1 概述栈帧也叫过程活动记录,是编译器用来进行方法调用和方法执行的一种数据结构,它是虚拟机运行时数据区域中的虚拟机栈的栈元素。栈帧中包括了局部变量表,操作数栈,动态链接和方法返回地址以及额外的一些附加信息,在编译过程中,局部变量表的大...原创 2018-11-03 23:22:03 · 382 阅读 · 0 评论 -
并发编程1-多线程基础
1.概述1.1 并发编程进阶熟练掌握API,能够完成并发编程-&amp;gt;熟读API源码,掌握其原理-&amp;gt;理解Java虚拟机的内存模型-&amp;gt;操作系统对并发的支持1.2 并发编程优缺点优点发挥多处理的强大能力, 建模的简单性, 异步事件的简化处理, 响应更加灵敏的用户界面缺点安全性问题,活跃性问题(抢占CPU,饥饿问题), 性能问题1.3 线程安全性问题创建线程 多种方...原创 2018-11-24 23:41:41 · 400 阅读 · 0 评论 -
并发编程3-synchronized
1.synchronized简介1.1 使用场景synchronized和内置锁(进入之后锁,出去之后解锁,实现原子操作,达到安全性)synchronized 放在普通方法上,获得的内置锁就是当前类的实例(对象)synchronized 修饰静态方法或class.Class中,内置锁是当前的Class字节码对象synchronized 修饰在同步代码快上,锁的粒度可...原创 2019-01-10 23:46:18 · 135 阅读 · 0 评论 -
并发编程2-创建线程及多线程风险
1.创建线程1.1 继承Thread类NewThreadExtendpublic class NewThreadExtend extends Thread { public NewThreadExtend(String name) { super(name); } @Override public void run() { ...原创 2019-01-05 23:32:26 · 141 阅读 · 0 评论 -
IO基础整理
1.File1.1 源码解析File实现了Serializable序列化和比较Comparablepublic class File implements Serializable, Comparable<File>1.2 代码示例import org.junit.Test;import java.io.File;import java.io.Filenam...原创 2019-05-12 23:48:31 · 140 阅读 · 0 评论