main执行sleep()时cpu如何操作?是释放cpu资源,还是占用锁资源?如果仅释放CPU资源,那么线程B也可以得到时间片运行不一定等sleep()结束。在sleep()时,线程B是进入了阻塞状态吗?如果是这样子,那么运行CPU时,是不是cpu资源不会被释放。如果CPU资源不会被释放,那么是如何实现sleep()的设置是为了确保线程A充分拿到时间片呢?
求解惑
public static void main(String[] args) {
Phone phone = new Phone();
new Thread(() -> {
try {
phone.sendSms();
} catch (InterruptedException e) {
e.printStackTrace();
}
}, "A").start();
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
new Thread(() -> {
try {
phone.callable();
} catch (Exception exception) {
exception.printStackTrace();
}
}, "B").start();
}
}
class Phone {
public synchronized void sendSms() throws InterruptedException {
System.out.println(Thread.currentThread().getName() + "++++++++发短信");
}
public synchronized void callable() throws InterruptedException {
System.out.println(Thread.currentThread().getName() + "++++++++打电话");
}