Java线程系列

01-Java线程的6种状态及切换(透彻讲解)

https://blog.csdn.net/pange1991/article/details/53860651

02-wait和sleep的区别

https://blog.csdn.net/a58220655/article/details/76695142

1.wait和notify方法定义在Object类中,因此会被所有的类所继承。 这些方法都是final的,即它们都是不能被重写的,不能通过子类覆写去改变它们的行为。 而sleep方法是在Thread类中是由native修饰的,本地方法。

    public static native void sleep(long l) throws InterruptedException;

2.当线程调用了wait()方法时,它会释放掉对象的锁。
另一个会导致线程暂停的方法:Thread.sleep(),它会导致线程睡眠指定的毫秒数,但线程在睡眠的过程中是不会释放掉对象的锁的。

3.正因为wait方法会释放锁,所以调用该方法时,当前的线程必须拥有当前对象的monitor,也即lock,就是锁。要确保调用wait()方法的时候拥有锁,即,wait()方法的调用必须放在synchronized方法或synchronized块中。

顺便说说notify(),notify()方法会唤醒一个等待当前对象的锁的线程。 如果多个线程在等待,它们中的一个将会选择被唤醒。这种选择是随意的,和具体实现有关。(线程等待一个对象的锁是由于调用了wait方法中的一个)。

被唤醒的线程是不能被执行的,需要等到当前线程放弃这个对象的锁。
被唤醒的线程将和其他线程以通常的方式进行竞争,来获得对象的锁。也就是说,被唤醒的线程并没有什么优先权,也没有什么劣势,对象的下一个线程还是需要通过一般性的竞争。
且notify方法和wait一样,是需要放在synchronized方法或synchronized块中。

03-Java多线程学习(吐血超详细总结)

https://blog.csdn.net/pange1991/article/details/53860651

04-线程池入门

https://www.cnblogs.com/chenmo-xpw/p/7059782.html

扫描二维码关注公众号,回复: 4344878 查看本文章

猜你喜欢

转载自blog.csdn.net/NRlovestudy/article/details/83019970
今日推荐