学习成长
坚持每天编写代码
冬雷小墨
这个作者很懒,什么都没留下…
展开
-
为什么在A线程中调用B线程的join方法会导致A线程阻塞?
观看源码可以了解到,Thread的join方法利用的是等待/唤醒机制实现的。join中的代码片段:if (millis == 0) { while (isAlive()) { wait(0); } } else { while (isAlive()) { ...原创 2018-07-12 12:58:01 · 4475 阅读 · 2 评论 -
堆实现数学表达式求值(利用逆波兰表达式)
1.表达式求值比较复杂,涉及到运算符的优先级,还有括号的影响,所以需要有一个合适的求值方法来完成,逆波兰式是个最佳选择,逆波兰式就是利用堆的特性来设计的。2.利用堆实现数学表达式求值,代码中主要的方法是initRPN方法和caculate方法,initRPN方法的功能是将输入的表达式(中缀表达式)按照规则转换成后缀表达式(逆波兰表达式),caculate是将逆波兰表达式按照规则计算结果。impor...原创 2018-07-11 12:49:57 · 375 阅读 · 0 评论 -
通过位运算计算A+B问题,不使用四则运算
这是一个模拟计算机中实现加法器的程序,所有的数加法最后都是在计算机中用二进制的位操作实现 两个一相加会产生进位,所以这个用两个数相与然后左移一位实现进位操作public class APlusB { public static void main(String[] args) { System.out.println(aplusb(10, 23)); } ...原创 2018-07-08 20:06:35 · 672 阅读 · 0 评论 -
偏向锁、轻量级锁、重量级锁的升级
这几个锁之间的关系和升级需要理解,重量级锁的获取和释放的开销比较大,所以不能在任何情况下都加上重量级锁;单线程的情况下锁是可以不需要的,但是需要有应对多线程的方案(锁升级);多个线程争夺锁,如果让一个线程稍微等一等能解决的问题就不要用重量级锁来完成。jvm中的的线程的调度由用户线程是完成不了的,需要使用内核线程才能够完成。重量级锁的开销主要是在线程从用户状态和内核状态之间的切换,java获取锁时,...原创 2018-07-06 17:07:47 · 376 阅读 · 0 评论 -
冒泡排序
冒泡排序算法思路,前后两个元素两两互相比较将较大或者较小的冒出去,接着进入下一轮循环重复操作需要使用两层循环,第一层循环是控制每一个元素都要进行冒泡,eg:1,2,3,6,4,5 按照降序排列,首先让1冒到后面,然后再让2冒到后面,这个过程需要使用循环来控制第二层循环:看第一层循环的过程,1先和2比交换位置,然后再和3比交换位置(这个不断比较交换的过程也需要循环来控制,控制每个元素冒泡的详细过程)...原创 2018-07-04 11:35:41 · 290 阅读 · 0 评论 -
求解power of tow问题(判断一个数是否为2的幂次方数)
public class PowerOfTow { public static void main(String[] args) { System.out.println(isPowerOfTow(4)); System.out.println(isPowerOfTow1(4, 0)); System.out.println(isPower...原创 2018-07-07 17:30:23 · 363 阅读 · 0 评论