java
叫兽张益达
那个人好像一条狗啊
展开
-
java字节码解析i++和++i的区别
代码问:++i和i++打印出来的都是几?相信大多数人都知道打印出来的是几,分别的9和8,原因是什么呢?字节码流程如下:1.bipush 8是往栈里面放入一个82.istore_1就是把栈里面的8弹出赋值给下标为1的变量(也就是i,args市下表为0的变量)3.iload_1再将变量下标为1的也就是i放到栈中4.iinc 1 by 1将变量数组下标为1的变量加1(此时是在局部变量表中加1,i变成了9)5.istore_1 将栈中的i弹出,返回。此时弹出的是栈中的i,此时栈中的i值为8,原创 2020-05-22 14:14:19 · 563 阅读 · 1 评论 -
创建线程的五种方式
创建线程的五种方式原创 2021-12-21 17:56:22 · 212 阅读 · 0 评论 -
java四种引用基本介绍
强引用开发种使用最多的,new对象都是强引用,只有没有指针指向的时候才会被GC回收软引用内存不够的时候,当发生GC的时候就会被回收,多被用于缓存(有了redis基本也不会使用这个了)弱引用只要产生GC就会被回收掉,ThreadLocal中存储在线程map中的this是一个弱引用虚引用虚引用被回收的时候会将虚引用放在一个队列中,如果队列中有值,则认为发生了垃圾回收,可以根据这个信号做其他操作。...原创 2021-10-26 22:49:43 · 96 阅读 · 0 评论 -
java线程关键字说明
sleep 睡眠指定时间,线程变为TIMED WAITING状态,注意不会释放锁。wait 等待线程等待,线程变为WAITING状态,需要在synchronized中使用。notify唤醒队列中线程,线程变为RUNNABLE状态,和wait配合使用。notifyAll 唤醒所有等待的线程,线程变为RUNNABLE状态。yeild 退出cpu占用,变为就绪状态join 一个线程执行另一个线程的join方法,在执行的那一行直接去执行另一个线程,另一个线程方法执行完了才返回调用join的位置再向下执行。原创 2021-10-26 22:37:32 · 327 阅读 · 0 评论 -
线程结束的方式
结束线程的几种方式总结1.stop 二话不说直接停止,不建议使用会导致数据不一致(比如此线程正在持有锁,停止会释放掉锁导致结果出乎意料)2.suspend 暂停 不建议使用,与1相同3.resume 恢复执行 不建议使用,与1相同4.volatile 定一个变脸被其修饰,可以通过判断这个变量来决定是否结束,不建议使用,如果在循环中使用,不一定循环多少次才停止5.inerrupt 设置中断标记位,检测到中断标记了,就停止,相对于4更好的原因是 不需要一直等,如果在代码中使用sleep,wait,j原创 2021-10-26 22:25:51 · 227 阅读 · 0 评论 -
精简synchronized和Lock的区别
话不多说直接来1.synchronized是jvm的关键字,Lock是java的接口2.synchronized不可中端,Lock可以被中断3.synchronized是非公平锁,Lock可以是公平锁也可以是非公平锁4.synchronized可以锁定代码块或者对象,Lock只能锁定代码块5.synchronized不需要手动解锁,Lock必须要手动解锁6.synchronized不能知道是否获取到了锁,Lock可以知道是否获取到了锁7.Lock可以使用读锁提高效率,synchronized没原创 2021-10-26 22:14:46 · 90 阅读 · 0 评论