摘要: 死锁 当多个线程各自占有一些资源,并且互相等待对方占有的资源时会出现死锁的问题。比如说线程A和线程B都需要拿到金锁和银锁才能继续执行,线程A先拿金锁再拿银锁,线程B先拿银锁再拿金锁,这样可能导致线程A拿到金锁,线程B拿到银锁,都在等待对方手中的锁,导致程序无法继续运行,就导致了死锁的问题。 死锁有四 阅读全文
posted @ 2020-10-19 00:28 提笔书几行 阅读(62) 评论(0) 推荐(0) 编辑
摘要: 线程同步 当多个线程操作同一资源,例如上万人同时抢几张火车票,几个人都想上厕所但只有一个坑位。这个时候就会由于资源的抢夺,导致程序输出错误的结果,比如说,一个人还没上完厕所,另一个就进去了。 线程同步就是用来解决上述问题,总的来说就是通过队列+锁的方式来控制对公共资源操作时不受其他线程影响 通过加锁 阅读全文
posted @ 2020-10-18 19:49 提笔书几行 阅读(60) 评论(0) 推荐(0) 编辑
摘要: 守护线程 线程可以分为用户线程和守护线程 虚拟机必须确保用户线程执行完毕,比如main()主线程 虚拟机不用等待守护线程执行完毕,比如gc()垃圾回收线程 采用Thread.setDaemon(bool)方法设置守护线程,默认为false 例子 package MultiProcess; publi 阅读全文
posted @ 2020-10-18 15:11 提笔书几行 阅读(63) 评论(0) 推荐(0) 编辑
摘要: 线程优先级 Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行。 线程的优先级用数字表示,范围从1-10 可以使用个体Priority()查看线程的优先级,setPriority(int)设置线程的优先级 源码 /** * The mi 阅读全文
posted @ 2020-10-18 14:46 提笔书几行 阅读(75) 评论(0) 推荐(0) 编辑
摘要: 线程状态观测 线程状态。线程可以处于以下状态之一: NEW 尚未启动的线程处于此状态。 RUNNABLE 在Java虚拟机中执行的线程处于此状态。 BLOCKED 被阻塞等待监视器锁定的线程处于此状态。 WAITING 正在等待另一个线程执行特定动作的线程处于此状态。 TIMED_WAITING 正 阅读全文
posted @ 2020-10-18 00:05 提笔书几行 阅读(39) 评论(0) 推荐(0) 编辑
摘要: 线程强制停止 采用Thread.join()方法 Join合并线程,待此线程执行完后,再执行其他线程,其它线程阻塞,可以想象为插队 package MultiProcess; //测试join方法 public class TestJoin { public static void main(Str 阅读全文
posted @ 2020-10-17 21:30 提笔书几行 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 线程礼让 礼让线程,让当前正在执行的线程暂停,但不阻塞。 将线程从运行状态转为就绪状态 通过Thread.yield()函数实现 礼让不一定成功,要看CPU的调度,不如A礼让B,A可能会再次抢到CPU的资源 package MultiProcess; //测试礼让线程 //礼让不一定成功,看CPU心 阅读全文
posted @ 2020-10-17 21:12 提笔书几行 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 计数排序 基本思想,找到数组中的最大值val,建立一个val+1大小的数组bucket,遍历原数组,若遍历到x,则将bucket进行加一,以某个元素出现的个数,最后遍历bucket将所有元素倒出来即可。 时间复杂度:O(n) 空间复杂度:O(n) 稳定性:不稳定 适用范围:非负整数,且最大值不能过大 阅读全文
posted @ 2020-10-17 20:46 提笔书几行 阅读(670) 评论(0) 推荐(0) 编辑
摘要: 归并排序 采用分治的思想,将数组进行等分,将分成的两个数组分别进行排序,merge两个数组 时间复杂度:O(nlogn) 空间复杂度:O(logn) 稳定性:稳定 package Sort; public class MergeSort { public static void swap(int[] 阅读全文
posted @ 2020-10-17 20:43 提笔书几行 阅读(328) 评论(0) 推荐(0) 编辑
摘要: 选择排序 基本思路:每次选择一个最小的值放在前面 时间复杂度:O(n^2) 空间复杂度:O(1) 稳定性:不稳定 package Sort; public class SelectSort { public static void swap(int[] vec, int i, int j){ int 阅读全文
posted @ 2020-10-17 20:39 提笔书几行 阅读(143) 评论(0) 推荐(0) 编辑