1. 程式人生 > >Thread類中sleep是為什麼是靜態方法

Thread類中sleep是為什麼是靜態方法

Thread sleep的含義

Thread類中sleep是靜態方法,表示當前執行緒休眠。

Thread的API

    public static native void sleep(long millis) throws InterruptedException;

/**    
     * Causes the currently executing thread to sleep (temporarily cease
     * execution) for the specified number of milliseconds, subject to
     * the precision and accuracy of system timers and schedulers. The thread
     * does not lose ownership of any monitors.
     *

Thread.sleep是 使 當前 執行得執行緒  休眠,就是 Thread.sleep所在程式碼片段的執行緒

Thread sleep和例項.Slepp的區別???

package com.linkage.deadlock;
public class Thread_Sleep extends Thread{
    @Override
    public void run() {
        // TODO Auto-generated method stub
        while(true){
     System.out.println("執行執行緒");
        }
    }

     public static void main(String[] args) {
    Thread_Sleep tt=new Thread_Sleep();
    
    tt.start();
      
      while(true){
          System.out.println("main---------------------------");
    try {
        tt.sleep(1000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
  
 
    }
     }
    
}




這個說明:tt.sleep還是在休眠主執行緒,而不是休眠 例項所線上程  

tt.sleep和 Thread.sleep效果 是一樣的,  實際上都是 呼叫類的靜態方法


為什麼不設計成非靜態的,當例項呼叫時,該例項休眠  ?

1、sleep是靜態方法,那麼在實現Runnable的執行緒類也能呼叫。
2、sleep是靜態方法,所以sleep時候只是讓出了cup卻不能釋物件鎖,因為獲取不到物件。???

3、執行緒和例項並不是對等的,不是一個執行緒是一個例項,是你建立的例項繼承了Thread或者Runable,實現了run(),並呼叫start()的時候能執行多個執行緒,例項還是一個,執行緒卻是多個。所以例項休眠執行緒就休眠了這個假設不成立。

如果sleep不是靜態的, 只對當前程序作用. 而是例項方法, 那麼應該和suspend有同樣的問題, 死鎖.