Java中wait和sleep方法的区别
来源:互联网 发布:淘宝店铺打理 编辑:程序博客网 时间:2024/06/10 01:48
坚持每天写博文,积累下开发中的点点滴滴
Java中的多线程是一种抢占式的机制而不是分时机制。
线程主要有以下几种状态:可运行,运行,阻塞,死亡。
- 抢占式机制
指的是有多个线程处于可运行状态,但是只有一个线程在运行;每个对象都有一个机锁来控制同步访问。Synchronized关键字可以和对象的机锁交互,来实现线程的同步。
由于sleep()方法是Thread类的方法,因此它不能改变对象的机锁。所以当在一个Synchronized方法中调用sleep()时,线程虽然休眠了,但是对象的机锁没有被释放,其他线程仍然无法访问这个对象。
而wait()方法则会在线程休眠的同时释放掉机锁,其他线程可以访问该对象。
一个线程结束的标志是:run()方法结束。
Wait()方法和notify()方法:当一个线程执行到wait()方法时(线程休眠且释放机锁),它就进入到一个和该对象相关的等待池中,同时失去了对象的机锁。当它被一个notify()方法唤醒时,等待池中的线程就被放到了锁池中。该线程从锁池中获得机锁,然后回到wait()前的中断现场。
- Yield()方法
是停止当前线程,让同等优先权的线程运行。如果没有同等优先权的线程,那么Yield()方法将不会起作用。
- join()方法
使当前线程停下来等待,直至另一个调用join方法的线程终止。
值得注意的是:线程的在被激活后不一定马上就运行,而是进入到可运行线程的队列中。
- wait和sleep方法的区别
- sleep方法只让出了CPU,而并不会释放同步资源锁
wait()方法则是指当前线程让自己暂时退让出同步资源锁,以便其他正在等待该资源的线程得到该资源进而运行,只有调用了notify()方法,之前调用wait()的线程才会解除wait状态 - sleep()方法可以在任何地方使用;wait()方法则只能在同步方法或同步块中使用;
- sleep()是线程线程类(Thread)的方法,
wait()是Object的方法 - sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
- sleep方法只让出了CPU,而并不会释放同步资源锁
阅读全文
0 0
- Java中sleep方法和wait方法的区别
- java 中sleep()方法和wait()方法的区别
- Java中sleep方法和wait方法的区别?
- JAVA 中sleep和wait()方法区别
- 关于java中wait()和sleep()方法间的区别
- java线程中wait和sleep方法的区别
- java多线程中wait()和sleep()方法的区别
- java中的多线程中wait和sleep方法的区别
- 关于java中sleep()和wait()方法的区别
- Java中wait和sleep方法的区别
- Java中wait和sleep方法的区别
- Java中sleep和wait的区别
- Java中sleep和wait的区别
- java中wait和sleep的区别
- Java中sleep和wait的区别
- Java中sleep和wait的区别
- java中sleep()和wait()的区别
- Java中sleep和wait的区别
- ElasticSearch的使用
- 斐讯0元购路由器,K2P、K3怎么样?
- TensorBoard 出现 No scalar data was found
- ubuntu安装IDEA 2017.12.10
- Linux 安装Redis4.0
- Java中wait和sleep方法的区别
- 入场动画
- 文章标题
- ExecutorService的正确关闭方法
- Django项目-编写Django应用
- 状态机(一):抽象的控制流程模型
- netty源码分析之-ByteBuf详解以及与JDK中ByteBuffer差异(11)
- 「Deep Learning」理解Pytorch中的「torchvision.transforms」
- 性能测试之常见系统应用分层架构