摘要: 1.实例:3个线程交替打印1,2,3一定次数 代码如下: 运行结果: 2.源码分析 首先3个线程启动后会执行lock方法,这个方法底层是AQS实现的。 ReentrantLock默认非公平锁,所以lock方法会首先尝试通过CAS直接获取锁,如果获取失败执行acquire(1)函数。 这里只有一个线程 阅读全文
posted @ 2019-09-01 15:28 css12345 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 最近看了线程池的部分源码,所以进行一个简单总结。首先线程池有四种,固定大小的、缓存的、单线程的和有调度的这四种。其中前三种都是返回一个ThreadPoolExecutor对象,这个对象与ExecutorService和Executor的关系如图所示。对于这个类的构造函数,参数含义如下: 还有几个重要 阅读全文
posted @ 2019-03-27 16:20 css12345 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 第五题 用两个栈实现队列,leetcode232 思路:加入元素时加入栈1,Pop时先看栈2是否为空,如果栈2为空,把栈1中所以元素依次Pop再Push进栈2即可得到队列的效果。比如加入1,2,3,这时栈1从上到下为3,2,1;栈2为空,把3Pop再Push进栈2,再对2、1进行操作,这样之后栈1为 阅读全文
posted @ 2019-02-26 15:40 css12345 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 第四题 重建二叉树 思路:通过前序序列确定根节点,在中序序列找到其位置,确定左右子树,并把对应左右子树的数组根据根节点位置拷贝到新数组中,递归调用得到左右子树。 时间复杂度:O(n)。 代码: 阅读全文
posted @ 2019-02-25 23:51 css12345 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 第三题 从尾到头打印链表 思路:一种是反转链表再输出,这样会改变原来结构;另一种是正向遍历,将结果存入栈中,再依次出栈即可,或者使用递归,也是同样的道理。 时间复杂度:O(n)。 代码: 阅读全文
posted @ 2019-02-25 23:05 css12345 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 第二题 替换空格 思路:一种是申请一个新字符串遍历即可,一种是在原字符串上进行替换。当从前往后遍历字符时遇到空格需要后面的字母移动,时间复杂度为O(n2);而先计算出扩容后的大小从后面利用两个指针,一个指向之前的字符串的尾部,一个指向扩容后的尾部,向前移动第一个指针,判断该位置字母是否是空格来控制后 阅读全文
posted @ 2019-02-25 22:25 css12345 阅读(90) 评论(0) 推荐(0) 编辑
摘要: 第一题 二维数组中的查找 思路:选择最右上角元素,判断是否相等,相等直接返回true;若元素值大于target,相当于筛掉了该元素所在列;若小于相当于筛掉了该元素所在行。当到达最左下角还未找到时结束循环,返回false。 时间复杂度:O(row+column),row为二维数组的行数,column为 阅读全文
posted @ 2019-02-25 21:54 css12345 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 经过很长时间的尝试,终于大致清楚了java程序打包成exe的过程,特做此总结。 首先打包成exe文件有两种方式,一种是通过javafx本地打包的方式,参考文章https://code.makery.ch/zh-cn/library/javafx-tutorial/part7/ ,最后通过ant构建, 阅读全文
posted @ 2018-12-20 14:55 css12345 阅读(1165) 评论(0) 推荐(0) 编辑
摘要: 通过命令 移到底部,移回左边Bottom改为Left即可。 设置自动隐藏在系统设置-->外观-->行为-->自动隐藏启动器,选择开启即可。 按super(win)键可显示出来。 阅读全文
posted @ 2018-12-06 17:34 css12345 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 参考https://blog.csdn.net/weixin_42039699/article/details/82078159 阅读全文
posted @ 2018-12-06 11:09 css12345 阅读(505) 评论(0) 推荐(0) 编辑