- 博客(7)
- 收藏
- 关注
原创 并发编程-共享模型之管程
1. 五种状态这是从 操作系统 层面来描述的新建:创建了线程对象,还未与操作系统线程关联可运行:就绪状态,就是start()方法运行:指获取了 CPU 时间片运行中的状态当 CPU 时间片用完,会从【运行状态】转换至【可运行状态】,会导致线程的上下文切换阻塞:处于运行状态中的线程由于某种原因,暂时放弃对 CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才 有机会再次被 CPU 调用以进入到运行状态。死亡:表示线程已经执行完毕,run()方法执行完毕,生命周期已经结束
2020-12-11 18:48:18
208
原创 并发编程-两阶段终止模式
1.1 sleep 与 yieldsleep调用 sleep 会让当前线程从 Running 进入 Timed Waiting 状态(阻塞)其它线程可以使用 interrupt 方法打断正在睡眠的线程,这时 sleep 方法会抛出 InterruptedException睡眠结束后的线程未必会立刻得到执行建议用 TimeUnit 的 sleep 代替 Thread 的 sleep 来获得更好的可读性yield调用 yield 会让当前线程从 Running 进入 Runnable 就绪状
2020-12-10 18:34:05
178
原创 冒泡排序、选择排序、插入排序
1.冒泡排序1.1 冒泡排序基本介绍冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。优化:因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志 flag 判断元素是否进行过交换。从而减少不必要的比较。(这里说的优化,可以在冒泡排序写好后,在进行)- 升序(大数下沉,小数
2020-10-19 22:38:38
257
原创 递归:迷宫问题和八皇后问题
1.递归介绍1.1 递归的概念简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。1.2 递归调用机制打印问题阶乘问题// 阶乘问题public static int factorial(int n) { if (n == 1) { return 1; } else { return factorial(n - 1) * n; }}1.3 递归能解决
2020-10-16 18:03:38
210
原创 栈、后缀表达式(逆波兰表达式)
栈1.栈的定义栈的英文为(stack)栈是一个先入后出(FILO-First In Last Out)的有序列表。栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除图解方式说明出栈(pop)和入栈(push)的概念2.
2020-10-11 20:58:18
341
原创 单链表和双链表、循环链表
1、链表(Linked List)介绍1.1、内存结构内存上来看:链表存储空间不连续(不像数组)假设有一个线性表为(a1,a2,a3,a4,a5,a6),则其对应的带有头结点的链表表示及存储结构如图所示,其中head指针的值为2020H。1.2 、逻辑结构逻辑上来看:链表属于线性结构含有n个元素的线性表通过每个结点的指针域链接成一个链表。又由于此链表的每个结点中只有一个指向后继的指针,所以称其为单链表或线性链表。下图的单链表是带有头结点的单链表,头结点的作用是方便单链表的特殊操作,简化代
2020-10-10 13:59:41
1370
原创 稀疏 sparsearray 数组、队列、循环队列
稀疏 sparsearray 数组1.1 实际需求编写的五子棋程序中,有存盘退出和续上盘的功能因为该二维数组的很多值是默认值 0 ,因此记录了很多没有意义的数据,我们将其转为稀疏数组进行存1.2 基本介绍当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法是:(1) 记录数组 一共有几行几列,有多少个不同的值(2) 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而 缩小程序的规模2.应用实例使用稀疏数组,来保留类似前面的二.
2020-09-25 21:48:25
262
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人