- 博客(14)
- 收藏
- 关注
原创 JAVA -- 线程wait()和sleep()的区别
wait()属于Object类中,sleep()属于Thread类中。 sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。 在调用sleep()方法的过程中,线程不会释放对象锁。 而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池
2015-05-31 16:43:11 461
原创 JAVA -- 线程sleep()和yield()、join()方法区别
1、sleep()方法 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。 让其他线程有机会继续执行,但它并不释放对象锁。也就是如果有Synchronized同步块,其他线程仍然不同访问共享数据。注意该方法要捕获异常 比如有两个线程同时执行(没有Synchronized),一个线程优先级为MAX_PRIORIT
2015-05-31 12:02:50 3010
原创 JAVA -- 线程的sleep()方法为什么是静态的
sleep()只能让当前线程睡眠,当前线程是自愿的。 如果让sleep()成为实例方法,当前线程可以直接sleep别的线程,会引入很多多线程的问题。 Thread中很多方法被弃用,destroy(), suspend(), stop(),resume()这些实例方法;剩下的只有一些static方法和只对当前线程操作方法。 为什么destroy(),
2015-05-31 11:13:57 1413 1
翻译 JAVA -- 线程run和start的区别
Java线程中run和start方法的区别Thread类中run()和start()方法的区别如下:run()方法:在本线程内调用该Runnable对象的run()方法,可以重复多次调用;start()方法:启动一个线程,调用该Runnable对象的run()方法,不能多次启动一个线程;package com.ljq.test;public class Thre
2015-05-29 16:41:03 421
原创 JAVA -- 堆栈的区别
Java 中的堆和栈 Java把内存划分成两种:一种是栈内存,一种是堆内存。 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。 堆内存用来存放
2015-05-29 16:07:13 353
原创 9 -- 鸡尾酒排序
九、鸡尾酒排序 鸡尾酒排序又叫定向冒泡排序,来回排序,涟漪排序,搅拌排序,快乐小时排序,它是冒泡排序的一种变形。 它和冒泡排序的不同之处在于:冒泡排序是单向进行的,而鸡尾酒排序是以双向在序列中进行排序的。 原理如下: 1)先对数组进行从左到右升序的冒泡排序; 2)再对数组进行从右到左的降序的冒泡排序;
2015-05-29 15:08:44 504
原创 8 -- 插入排序之希尔排序
八、希尔排序 希尔排序,是递减增量排序算法,是插入排序的一种高速而稳定的改进版本。基于以下两点性质改进: 1)插入排序对几乎排好序的数据操作,效率高。即可达到线性排序的效率。 2)插入排序一般来说是低效的,因为每次只能将数据移动一位。 希尔算法把比较的元素分为几个区域来提升性能。让一个元素可以一次性的朝
2015-05-29 11:37:37 389
原创 7 -- 插入排序之折半插入排序
7、折半插入排序 折半插入:考虑到插入第i个元素前面的i-1个元素是有序的,计算0~i-1的中间点,和i个元素进行比较,这样完成了折半。然后不停地用上面的步骤,快速的找出第i个元素的位置。 //折半插入排序 public static void insertHalfSort(int a[]){ int i=0,j=0;
2015-05-29 11:09:25 570
原创 6 -- 插入排序之直接插入排序
六、直接插入排序 插入排序:每次将一个待排序的记录,按其关键字大小插入到前面已经排序好的子文件的适当位置。 哨兵(监视哨)有两个作用:一是作为临变量存放R[i](当前要进行比较的关键字)的副本;二是在查找循环中用来监视下标变量j是否越界。 当文件的初始状态不同时,直接插入排序所耗费的时间是有很大差异的。最好情
2015-05-28 17:31:34 645
原创 5 -- 归并排序(合并排序)
五、 归并排序(合并排序) 它是一种基于“分治”策略的一种算法。对于规模较大的问题,可以分解成若干容易求解的简单的问题,最后把解合并构成初始问题的解。 总时间=分解时间+解决问题时间+合并时间。
2015-05-28 17:19:43 599
原创 4 -- 交换排序之快速排序
四、快速排序算法 快速排序是冒泡排序的一种改进,冒泡排序排完一趟最大值冒出来了,那么可不可以先选定一个值,然后扫描待排序序列,把小于该值得记录和大于该值得记录分成两个单独的序列,然后分别对这两个序列进行上述操作。我们把选定的值作为枢纽值,如果枢纽值为序列中的最大值,那么一趟快速排序就变成了一趟冒泡排序。 快速排序时间与划分是否对称有关。快速排序的平均时间
2015-05-28 14:48:32 504
原创 3 -- 交换排序之冒泡排序
三、冒泡排序算法 冒泡排序基于交换 。每次从第一个记录开始,一二两个记录比较,大的往后放,二三两个记录比较,依次类推,这就是一趟冒泡排序。每一趟冒泡排序后,无序序列中值最大的记录冒岛序列末尾,所以称之为冒泡排序。 相对于简单选择排序,冒泡排序交换次数明显更多。它是通过不断地交换把最大的数冒出来。冒泡排序平均时间和最坏情况下(逆序)时间为o(
2015-05-28 14:42:45 437
原创 2 -- 选择排序之堆排序
二、堆排序 简单排序的时间复杂度是O(n^2),简单选择排序只要操作是进行关键字的比较,怎样减少比较次数就是改进的关键。 堆排序:A、B、C进行比赛,B战胜了A,C战胜了B,那么显然C可以战胜A,C和A就不用比了。 堆是一种数据结构, 是一颗完全二叉树且满足性质:所有非叶子结点的值均不大于或均不小于其左,右孩子
2015-05-28 14:41:29 431
原创 1-- 选择排序之简单选择排序
(1)简单选择排序和堆排序的基本思想是什么?(2)选择排序的本质是什么一、简单选择排序 简单选择排序最佳情况下,记录移动次数为0, 最坏情况下,记录移动次数n-1。外层循环进行了n-1趟选择,第i趟选择要进行n-i次比较,忽略移动记录时间(为一常数)。所以总时间是(n-1)*(n-i)=n^2-(i+1)*n+i。时间复杂度为O(n^2)。
2015-05-28 14:13:36 647
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人