摘要: 前言:在java5以后,增加了JUC的并发包且提供了Lock接口用来实现锁的功能。 Lock是一个接口,核心的两个方法lock和unlock,它有很多的实现,比如ReentrantLock、ReentrantReadWriteLock; ReentrantLock 重入锁,表示支持重新进入的锁,也就 阅读全文
posted @ 2019-10-29 22:03 snail灬 阅读(335) 评论(0) 推荐(0) 编辑
摘要: Condition是一个多线程协调通信的工具类,可以让某些线程一起等待某个条件(condition),只有满足条件时,线程才会被唤醒。 condition中两个最重要的方法: | 方法 | 作用 | | | | | await | 当前线程阻塞挂起 | | signal | 唤醒阻塞的线程 | aw 阅读全文
posted @ 2019-10-29 21:55 snail灬 阅读(448) 评论(0) 推荐(0) 编辑
摘要: 锁 互斥锁的本质是-->共享资源 锁的使用 可以修饰在方法层面和代码块层面 class Test{ synchronized void demo(){ //临界区 } //修饰代码块 Object obj = new Object(); void demo(){ synchronized(obj){ 阅读全文
posted @ 2019-10-29 21:48 snail灬 阅读(262) 评论(0) 推荐(0) 编辑
摘要: Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。线程池就像数据库连接池的作用类似,只是线程池是用来重复管理线程避免创建大量线程增加开销。 合理的使用线程池: 降低创建线程和销毁线程的性能开销 合理的设置线程池大小可以避免因为线程数超出硬件资源瓶颈带来 阅读全文
posted @ 2019-10-29 21:24 snail灬 阅读(158) 评论(0) 推荐(0) 编辑
摘要: JMM保证原子性、可见性、有序性 原子性 两个高级的字节码指令monitorenter和monitorexit,在java中对应的Synchronized来保证代码块内的操作是原子的 可见性 volatile 写操作的时候会多出一个lock前缀的汇编指令 MESI的缓存一致性协议,来保证多CPU下的 阅读全文
posted @ 2019-10-29 21:22 snail灬 阅读(447) 评论(0) 推荐(0) 编辑
摘要: 并发编程基础: 线程状态(NEW、RUNNABLE、BLOCKED、WAITING、TIME_WAITING、TERMINATED) NEW:初始状态,线程被构建,但是还没有调用 start 方法 RUNNABLED:运行状态,JAVA 线程把操作系统中的就绪和运行两种状态统一称为“运行中” BLO 阅读全文
posted @ 2019-10-29 21:17 snail灬 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 什么是Dockerfile? ~~~text Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取 中的指令自动生成映像。 命令用于从Dockerfile构建映像。可以在 命令中使用 标志指向文件系统中任何位置的Dockerfile。 ~ 阅读全文
posted @ 2019-10-29 19:31 snail灬 阅读(156) 评论(0) 推荐(0) 编辑
摘要: jps java process status jps l 主 类 全 名 jps m 运 行 传 入 主 类 的 jps v 虚 拟 机 参 数 jstat 类 加 载 , 内 存 , 垃 圾 收 集 , jit 编 译 信 息 、 https://docs.oracle.com/javase/8 阅读全文
posted @ 2019-10-29 02:20 snail灬 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 字节码与数据类型 在虚拟机的指令集中,大多数的指令包含了其操作所对应的 数据类型信息 iLoad:从局部变量表中加载int型数据到操作数栈 大多数指令包含类型信息 类型多,指令少 加载与存储指令 加载和存储指令用于将数据在栈帧中的局部变量表和操作数栈直接来回传输 将局部变量表加载到操作数栈: ilo 阅读全文
posted @ 2019-10-29 02:19 snail灬 阅读(145) 评论(0) 推荐(0) 编辑