摘要:1、线程状态及切换 Java中的线程有六种状态,使用线程Thread内的枚举类来实现,如下,我对每个状态都进行了一定的解释。 除了NEW和TERMINATED之外,其他的状态都是可以相互转换的,其转换过程如下图所示 这里特别讲一下RUNNABLE状态,在这个状态中线程并不一定在执行程序,只有被JVM 阅读全文
posted @ 2019-10-17 23:37 张小云的博客 阅读 (217) 评论 (0) 编辑
摘要:一、指令重排序 指令重排序分为三种,分别为编译器优化重排序、指令级并行重排序、内存系统重排序。如图所示,后面两种为处理器级别(即为硬件层面)。 编译器优化重排序:编译器在不改变程序执行结果的情况下,为了提升效率,对指令进行乱序的编译。例如在代码中A操作需要获取其他资源而进入等待的状态,而A操作后面的 阅读全文
posted @ 2019-10-15 21:43 张小云的博客 阅读 (114) 评论 (0) 编辑
摘要:本文的内存模型只写虚拟机内存模型,物理机的不予描述。 一、Java的运行时区域 在Java中,虚拟机将运行时区域分成6种,如图: 由于类和方法的信息难以确定,不好设定大小,太大则影响年老代,太小容易内存溢出。 GC不好处理,回收效率低下,调优困难。 在上面的6种类型中,前三种是线程私有的,也就是说里 阅读全文
posted @ 2019-10-09 23:24 张小云的博客 阅读 (162) 评论 (0) 编辑
摘要:1、在分布式系统中,我们使用锁机制只能保证同一个JVM中一次只有一个线程访问,但是在分布式的系统中锁就不起作用了,这时候就要用到分布式锁(有多种,这里指 redis) 2、在 redis当中可以使用命令 setnx(key, value)来实现分布式锁 setnx:当key不存在的时候设置成功,返回 阅读全文
posted @ 2019-09-10 10:32 张小云的博客 阅读 (36) 评论 (0) 编辑