挂起和阻塞区别?sleep()和wait()的区别?

挂起和阻塞区别:
(1)挂起是一种主动行为,因此恢复也应该要主动完成。而阻塞是一种被动行为,是在等待事件或者资源任务的表现,你不知道它什么时候被阻塞,也不清楚它什么时候会恢复阻塞。
(2)阻塞(pend)就是任务释放CPU,其他任务可以运行,一般在等待某种资源或者信号量的时候出现。挂起(suspend)不释放CPU,如果任务优先级高,就永远轮不到其他任务运行。一般挂起用于程序调试中的条件中断,当出现某个条件的情况下挂起,然后进行单步调试。

sleep()和wait()函数的区别:
(1)两者比较的共同之处是:两个方法都是使程序等待多少毫秒。
(2)最主要区别是:sleep()方法没有释放锁。而wait()方法释放了锁,使得其他线程可以使用同步控制块或者方法。
(3)sleep()指线程被调用时,占着CPU不工作,形象的说明为“占着CPU”睡觉。
sleep(2000)表示:占用CPU,程序休眠2秒。
wait(2000)表示:不占用CPU,程序等待2秒。

  • 9
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
### 回答1: sleep()和wait()是两个不同的函数,它们的作用也不同。 sleep()函数是让当前线程休眠一段时间,单位是秒。在休眠期间,线程不会执行任何操作,直到休眠时间结束才会继续执行。 wait()函数是让当前线程等待另一个线程的通知。当一个线程调用wait()函数时,它会释放它所持有的锁,并进入等待状态,直到另一个线程调用notify()或notifyAll()函数来通知它。在等待期间,线程不会执行任何操作,直到收到通知才会继续执行。 因此,sleep()函数是用于线程休眠,而wait()函数是用于线程等待通知。 ### 回答2: sleep()和wait()是Java中的线程控制方法,主要用于控制线程的暂停和等待。它们的区别如下: 1. 功能不同: - sleep()方法是Thread类的静态方法,用于让当前的线程暂停执行一段时间,不会释放持有的锁。在指定时间间隔后,线程会自动恢复运行状态。 - wait()方法是Object类的方法,用于将当前线程暂时挂起并释放对象的锁。线程会一直等待,直到其他线程调用相同对象的notify()或notifyAll()方法唤醒它。 2. 使用方式不同: - sleep()方法可以在任何情况下使用,只需要指定等待时间即可。例如:Thread.sleep(1000); //暂停1秒钟。 - wait()方法必须在synchronized块中使用,即在获取对象的锁之后才能调用。例如: ``` synchronized (obj) { try { obj.wait(); //等待其他线程唤醒 } catch (InterruptedException e) { e.printStackTrace(); } } ``` 3. 线程状态不同: - sleep()方法暂停线程后,线程状态仍然是"RUNNABLE",表示可被调度执行。 - wait()方法暂停线程后,线程状态会变为"WAITING"或"TIMED_WAITING",表示线程正在等待其他线程的通知。 4. 锁的释放与获取: - sleep()方法不会释放锁,线程暂停后,其他线程无法获取该锁。 - wait()方法会释放对象的锁,允许其他线程进入同步块并操作该对象。 总结:sleep()用于线程暂停一段时间,不会释放锁;wait()用于线程等待,会释放锁。因此,sleep()更多用于暂停,而wait()更多用于线程之间的通信和同步。 ### 回答3: sleep()和wait()是两个不同的方法,用于线程的控制和调度。 sleep()方法是Thread类的静态方法,可以让当前线程休眠指定的时间。它是通过主动让线程进入阻塞状态来实现的,可以理解为线程在休息,但不会释放锁资源。当线程的sleep时间到期后,线程重新进入就绪状态,等待系统调度执行。 wait()方法是Object类的方法,用于将当前线程让出对象的锁资源,进入等待状态。当调用wait()方法时,会释放对象的锁资源,使得其他线程可以访问该对象。wait()方法必须在同步代码块内使用。在调用wait()方法后,线程会进入等待状态,直到其他线程通过notify()或notifyAll()方法来唤醒该线程。 总结来说,sleep()和wait()的主要区别有: 1. sleep()是Thread类的方法,wait()是Object类的方法; 2. sleep()不会释放锁资源,wait()会释放锁资源; 3. sleep()可以在任意位置使用,不需要在同步代码块内,wait()必须在同步代码块内使用; 4. sleep()是主动让线程休眠一段时间,wait()是让线程进入等待状态,直到被唤醒。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值