我正在为我的 OCP 考试学习,并试图理解我们何时谈论线程死锁或线程处于饥饿状态。如果出现以下情况,我有疑问。
public class ThreadTest {
private static int i = 0;
public static void doSomething() {
synchronized(ThreadTest.class) {
while(true) {
System.out.println("count:" + ++i)
} }
}
public static void main(String args[]) {
New Thread(() -> doSomething()).start();
New Thread(() -> doSomething()).start();
}}
在 doSomething() 中获取同步 ThreadTest 类的锁的第一个线程进入无限循环,永远不会释放锁。第二个线程一直等待直到资源可用(永远不会发生)。
我们是在说这种情况下的死锁还是饥饿?我想到了饥饿,因为一个线程无法访问共享资源,并且死锁线程会阻塞其他资源。但为了确保我在这里问这个问题。
死锁描述了线程被永远阻塞的情况。
饥饿描述了线程无法定期访问共享资源的情况。