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() + "++++++++打电话");
}
CPU资源会被释放,但系统会保留现场,如果要确保一个线程有足够的时间2种办法:
1.设置为同步机制,确保执行完成别的线程才能进入;
2.提高优先级,优先级高的分配的时间更多。