您的位置 首页 java

Java中sleep和wait的区别

Java 中sleep和wait的区别

① 这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类。

sleep是Thread的静态类方法, 谁调用的谁去睡觉,即使在a线程里调用b的sleep方法,实际上还是a去睡觉, 要让b 线程 睡觉要在b的代码中调用sleep。

② 锁: 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。

sleep不出让系统资源;wait是进入线程等待池等待,出让系统资源,其他线程可以占用CPU。一般wait不会加时间限制,因为如果wait线程的运行资源不够,再出来也没用,要等待其他线程调用notify/notifyAll唤醒等待池中的所有线程,才会进入就绪队列等待OS分配系统资源。sleep(milliseconds)可以用时间指定使它自动唤醒过来,如果时间不到只能调用interrupt()强行打断。

Thread.sleep(0)的作用是“触发操作系统立刻重新进行一次CPU竞争”。

③ 使用范围:wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用。

synchronized (x){

x.notify()

//或者wait()

}

2. Java中 HashMap HashTable 的区别

① 历史原因: Hashtable是给予陈旧的Dictonary类的, HashMap是Java1.2引进的Map接口的一个实现

② HashMap允许空的键值对, 而HashTable不允许

③ HashTable同步,而HashMap非同步,效率上比HashTable要高

3. 请简述在异常当中,throw和 throws 有什么区别

① throw代表动作,表示抛出一个异常的动作;throws代表一种状态,代表方法可能有异常抛出② throw用在方法实现中,而throws用在方法声明中③ throw只能用于抛出一种异常,而throws可以抛出多个异常 
4. 内存溢出和 内存泄露 的区别 
③ 一次性内存泄漏。发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。比如,在类的 构造函数 中分配内存,在 析构函数 中却没有释放该内存,所以内存泄漏只会发生一次。 5. String, StringBuffer StringBuilder 的区别 
①可变与不可变   String类中使用字符数组保存 字符串 ,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的。    private final  char  value[];  StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,如下就是,可知这两种对象都是可变的。    char[] value;②是否多线程安全  String中的对象是不可变的,也就可以理解为常量,显然线程安全。  AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、 append 、insert、indexOf等公共方法。 

文章来源:智云一二三科技

文章标题:Java中sleep和wait的区别

文章地址:https://www.zhihuclub.com/194017.shtml

关于作者: 智云科技

热门文章

网站地图