JAvaベースのsleepとwaitの比較
sleepとwaitの比較
1.sleepがThreadクラスのメソッドwaitがObjectクラスのメソッド2.sleepはcpuのみを譲りますが、ロックリソースは解放されません.waitはcpuを譲渡してロックリソースを解放することを示し、他のスレッドがnotifyメソッドを呼び出した場合にのみ、元のスレッドがロックリソースを再競合しますが、すぐにロックを待つことはありません.ロックは他の人の手にあるので、notifyメソッドを呼び出したスレッドがロック元のスレッドを解放してから実行しなければなりません.
コードpublic class ThreadTest{
}
1.sleepがThreadクラスのメソッドwaitがObjectクラスのメソッド2.sleepはcpuのみを譲りますが、ロックリソースは解放されません.waitはcpuを譲渡してロックリソースを解放することを示し、他のスレッドがnotifyメソッドを呼び出した場合にのみ、元のスレッドがロックリソースを再競合しますが、すぐにロックを待つことはありません.ロックは他の人の手にあるので、notifyメソッドを呼び出したスレッドがロック元のスレッドを解放してから実行しなければなりません.
コードpublic class ThreadTest{
private static Object obj=new Object();
//
public static void main(String [] args){
// 1
new Thread1().start();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 2
new Thread2().start();
}
private static class Thread1 extends Thread{
@Override
public void run() {
synchronized (obj){
System.out.println(" 1");
System.out.println(" 1 wait ");
try {
obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(" 1 ");
System.out.println(" 1 ");
}
}
}
private static class Thread2 extends Thread{
@Override
public void run() {
synchronized (obj){
System.out.println(" 2 ");
System.out.println(" 2 notify ");
obj.notify();
try {
Thread.sleep(10);
// thread2 10 , thread1 , thread2
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(" 2 ");
System.out.println(" 2 ");
}
}
}
}