1. java中thread的start和run的區別
java中thread的start()方法和run()方法的區別:
t.start(); 該行代碼相當於是啟動線程,
t.run(); 該行代碼相當於是使用t這個類中的run方法而已。
2. java Thread的run方法運行機制
你的appect方法會阻塞線程的執行,客戶端連接之後,才會執行之後的代碼,然後在下一次循環又被accept阻塞
3. JAVA 中thread的run和start方法有什麼區別
1.start()方法來啟動線程,真正實現了多線程運行,這時無需等待run方法體代碼執行完畢而直接繼續執行下面的代碼:
通過調用Thread類的start()方法來啟動一個線程,
這時此線程是處於就緒狀態,
並沒有運行。
然後通過此Thread類調用方法run()來完成其運行操作的,
這里方法run()稱為線程體,
它包含了要執行的這個線程的內容,
Run方法運行結束,
此線程終止,
而CPU再運行其它線程,
2.run()方法當作普通方法的方式調用,程序還是要順序執行,還是要等待run方法體執行完畢後才可繼續執行下面的代碼:
而如果直接用Run方法,
這只是調用一個方法而已,
程序中依然只有主線程--這一個線程,
其程序執行路徑還是只有一條,
這樣就沒有達到寫線程的目的。
舉例說明一下:
記住:線程就是為了更好地利用CPU,
提高程序運行速率的!
public class TestThread1{
public static void main(String[] args){
Runner1 r=new Runner1();
//r.run();//這是方法調用,而不是開啟一個線程
Thread t=new Thread(r);//調用了Thread(Runnable target)方法。且父類對象變數指向子類對象。
t.start();
for(int i=0;i<100;i++){
System.out.println("進入Main Thread運行狀態");
System.out.println(i);
}
}
}
class Runner1 implements Runnable{ //實現了這個介面,jdk就知道這個類是一個線程
public void run(){
for(int i=0;i<100;i++){
System.out.println("進入Runner1運行狀態");
System.out.println(i);
}
}
}
4. java中Thread.start()和Thread.run()有什麼區別
run()方法,用於封裝線程運行的任務代碼。直接用創建的線程對象調用,
並沒有產生新的線程,僅僅是當前正在運行的線程(如,主線程)在執行run方法.
start()方法,共有兩個作用,1,開啟了當前線程,也就是說,
當前程序又多了一條執行路徑和當前線程(主線程)並發執行。
而run()方法會被新開啟的線程運行。2,調用線程的run()方法。
5. Java:為什麼在Thread的run()方法中不能使用sleep()暫停線程呢
sleep方法需要拋出異常
publicstaticnativevoidsleep(longmillis)throwsInterruptedException;
所以你需要try-catch一下才可以通過編譯,你的code改為:
if(!flag){
try{
Thread.sleep(2000);
}catch(InterruptedExceptione){
e.printStackTrace();
}
//剩下的代碼
應該就可以了
6. java中thread的start()和run()有何
1) start:
用start方法來啟動線程,真正實現了多線程運行,這時無需等待run方法體代碼執行完畢而直接繼續執行下面的代碼。通過調用Thread類的start()方法來啟動一個線程,這時此線程處於就緒(可運行)狀態,並沒有運行,一旦得到cpu時間片,就開始執行run()方法,這里方法 run()稱為線程體,它包含了要執行的這個線程的內容,Run方法運行結束,此線程隨即終止。
2) run:
run()方法只是類的一個普通方法而已,如果直接調用Run方法,程序中依然只有主線程這一個線程,其程序執行路徑還是只有一條,還是要順序執行,還是要等待run方法體執行完畢後才可繼續執行下面的代碼,這樣就沒有達到寫線程的目的。總結:調用start方法方可啟動線程,而run方法只是thread的一個普通方法調用,還是在主線程里執行。這兩個方法應該都比較熟悉,把需要並行處理的代碼放在run()方法中,start()方法啟動線程將自動調用 run()方法,這是由jvm的內存機制規定的。並且run()方法必須是public訪問許可權,返回值類型為void.。
7. Java中線程Thread有沒有帶參數的run方法呀
沒有,線程中沒有帶參數的run方法。
如果想要實現帶參數的run方法:
1、定義線程內變數
2、在繼承thread的時候,增加帶參數的構造函數,初始化線程內變數
3、在run方法操作線程內變數,以達到類似傳參的效果。
示例:
classMyThreadextendsThread{
inta=0;//定義線程內變數
publicMyThread(inta){//定義帶參數的構造函數,達到初始化線程內變數的值
this.a=a;
}
@Override
publicvoidrun(){
this.a++;//線程內變數自增
}
}