线程中yield()、sleep()、wait()、notify()、stop()、interrupt()、destroy()、suspend()、resume()对锁有何影响?
1.yield()
yield()方法仅仅只是让出cpu的执行权,并不会将锁让出,也就是不会释放锁资源。
2.sleep()
sleep()方法也不会释放当前线程所持有的锁,当我们的线程休眠后,必须等待线程休眠过后,其他(未休眠的)线程才可以拿到锁。
3.wait()
wait()方法被调用后会释放当前线程所持有的锁,当被唤醒的时候会继续去竞争锁。竞争到锁后,才能继续执行下面的业务。
4.notify()
调用notify()方法不会释放锁,只有同步代码块的业务执行完成后才会释放锁,一般该方法放在代码最后一行。
5.stop()
终止线程。弃用方法。调用该方法无论run()中的逻辑是否执行完,都会释放CPU资源,释放锁资源。导致线程不安全。
6. interrupt()
中断线程。线程调用interrupt时,如果该线程正在执行普通的代码,那么该线程根本就不会抛出InterruptedException异常。但是一旦该线程进入到wait、join、sleep后,就立刻抛出该异常。单独调用interrupt()方法不能中断正在运行过程中的线程,只能中断阻塞过程中的线程。
7. destroy()
弃用方法。强制终止线程,但该线程不会释放对象锁。
8. suspend()
暂停线程。弃用方法。执行该方法释放了CPU资源,没有释放锁资源,可能出现死锁。该方法导致线程暂停的同时,并不会去释放任何锁资源。其他线程都无法访问被它占用的锁。直到对应的线程执行resume()方法后,被挂起的线程才能继续,从而其它被阻塞在这个锁的线程才可以继续执行。
9. resume()
重启线程.弃用方法.suspend()和resume()必须要成对出现,否则非常容易发生死锁。不会释放对象锁。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。