Java基础知识
孤独的木头人
这个作者很懒,什么都没留下…
展开
-
2.Redis-数据类型和通用指令
这里写目录标题数据类型数据存储类型介绍业务数据的特殊性作为缓存使用附加功能Redis 数据类型(5种常用)stringredis 数据存储格式string 类型string 类型数据的基本操作单数据操作与多数据操作的选择之惑string 类型数据的扩展操作业务场景(保持主键增长并且唯一)解决方案string 作为数值操作业务场景(投票)解决方案string 类型数据操作的注意事项string 类型...原创 2020-05-07 00:04:36 · 555 阅读 · 0 评论 -
JUC-并发编程-模式
模式终止模式之两阶段终止模式Two Phase Termination 在一个线程 T1 中如何“优雅”终止线程 T2?这里的【优雅】指的是给 T2 一个料理后事的机会。1. 错误思路使用线程对象的 stop() 方法停止线程(已被废弃)stop 方法会真正杀死线程,如果这时线程锁住了共享资源,那么当它被杀死后就再也没有机会释放锁,其它线程将永远无法获取锁使用 System...原创 2020-05-05 23:52:27 · 458 阅读 · 0 评论 -
JUC-并发编程-应用
并发编程应用限制1. 案例-防止 CPU 占用 100%sleep 实现 在没有利用 cpu 来计算时,不要让 while(true) 空转浪费 cpu,这时可以使用 yield 或 sleep 来让出 cpu 的使用权给其他程序while(true) { try { Thread.sleep(50); } catch (InterruptedException e) { ...原创 2020-05-05 23:52:12 · 380 阅读 · 0 评论 -
6.JUC-共享模型之工具
1 线程池1. 自定义线程池步骤1:自定义拒绝策略接口@FunctionalInterface // 拒绝策略interface RejectPolicy<T> { void reject(BlockingQueue<T> queue, T task);}步骤2:自定义任务队列class BlockingQueue<T> { // 1...原创 2020-05-05 23:48:53 · 640 阅读 · 0 评论 -
JUC-并发编程-原理
并发编程原理Monitor 原理synchronized 原理synchronized 原理进阶1. 轻量级锁2. 锁膨胀3. 自旋优化4. 偏向锁偏向状态撤销 - 调用对象 hashCode撤销 - 其它线程使用对象撤销 - 调用 wait/notify批量重偏向批量撤销5. 锁消除wait notify 原理join 原理Monitor 原理Monitor 被翻译为监视器或管程 每个 ...原创 2020-05-05 23:47:23 · 1567 阅读 · 0 评论 -
5.JUC-共享模型之不可变
1 日期转换的问题问题提出 下面的代码在运行时,由于 SimpleDateFormat 不是线程安全的SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");for (int i = 0; i < 10; i++) { new Thread(() -> { try { ...原创 2020-05-02 23:06:42 · 204 阅读 · 0 评论 -
4.JUC-共享模型之无锁
1 问题提出 有如下需求,保证 account.withdraw 取款方法的线程安全interface Account { // 获取余额 Integer getBalance(); // 取款 void withdraw(Integer amount); /** * 方法内会启动 1000 个线程,每个线程做 -10 元 的操作 ...原创 2020-05-02 16:36:21 · 348 阅读 · 0 评论 -
3.JUC-共享模型之内存
共享模型之内存1 Java 内存模型2 可见性退不出的循环解决方法可见性 vs 原子性* 原理之 CPU 缓存结构* 模式之两阶段终止 * 模式之 Balking 3 有序性* 原理之指令级并行诡异的结果解决方法* 原理之 volatilehappens-before习题balking 模式习题线程安全单例习题本章小结1 Java 内存模型 JMM 即 Java Memory Model,它...原创 2020-05-01 14:12:20 · 297 阅读 · 0 评论 -
2.JUC-共享模型之管程
共享模型之管程1. 共享带来的问题小故事老王(操作系统)有一个功能强大的算盘(CPU),现在想把它租出去,赚一点外快小南、小女(线程)来使用这个算盘来进行一些计算,并按照时间给老王支付费用但小南不能一天24小时使用算盘,他经常要小憩一会(sleep),又或是去吃饭上厕所(阻塞 io 操作),有时还需要一根烟,没烟时思路全无(wait)这些情况统称为(阻塞)在这些时候,算盘没利用起...原创 2020-04-30 00:17:23 · 650 阅读 · 0 评论 -
1.JUC-Java线程
Java线程1. 创建和运行线程方法一,直接使用 Thread方法二,使用 Runnable 配合 Thread原理之Thread与Runnable的关系方法三,FutureTask 配合 Thread原创 2020-04-27 17:08:45 · 309 阅读 · 0 评论 -
5.JVM-内存模型
内存模型1. Java内存模型很多人将【java内存结构】与[java内存模型】傻傻分不清,[java内存模型】是Java Memory Model (JMM)的意思。 1关于它的权威解释,请参考 链接简单的说,JMM定义了一套在多线程读写共享数据时(成员变量、数组)时,对数据的可见性、有序性、 和原子性的规则和保障1.1 原子性1.2 问题分析1.3 解决方法2. 可见性2.1...原创 2020-04-25 22:54:27 · 165 阅读 · 0 评论 -
4.JVM-类加载器与字节码技术
类加载和字节码技术1.类文件结构JVM规范,类文件结构1.1 魔数0-3字节,表示它是否是【class】类型的文件0000000 ca fe ba be 00 00 00 34 00 23 0a 00 06 00 15 091.2 版本4-7字节,表示类的版本 00 34(52) 表示是java80000000 ca fe ba be 00 00 00 34 00 23 0a 0...原创 2020-04-24 23:56:51 · 357 阅读 · 0 评论 -
3.JVM-垃圾回收
垃圾回收1. 判断对象是否可以回收1.1引用计数法 如果两个对象互相引用,计数器都为1,即使他们都没有被使用,都不会被清理。1.2可达性分析算法在Java中,可以作为GC Root 的对象包括下面几种:虚拟机栈(栈帧中的本地变量表)中引用的对象。方法区中类静态属性引用的对象。方法区中常量引用的对象。本地方法栈中JNI(即一般说的Native方法)引用的对象。查看哪些对...原创 2020-04-20 21:50:42 · 274 阅读 · 0 评论