2013-02-11 60 views
2

我是java新手。有人可以幫助我爲什麼它不調用運行方法。 在此先感謝。主題:未調用運行方法

package com.blt; 

public class ThreadExample implements Runnable { 
    public static void main(String args[]) 
    {  

     System.out.println("A"); 
     Thread T=new Thread(); 
     System.out.println("B"); 
     T.setName("Hello"); 
     System.out.println("C"); 
     T.start(); 
     System.out.println("D"); 
    } 

public void run() 
{ 
    System.out.println("Inside run"); 

} 
} 

回答

4

您需要的ThreadExample一個實例傳遞給Thread構造,告訴新的線程來運行什麼:

Thread t = new Thread(new ThreadExample()); 
t.start(); 

(這是不幸的是,Thread類已經以各種方式被設計不當。如果它沒有有一個run()方法本身,但沒有強制你傳遞一個Runnable到構造函數將會更有幫助。然後你會發現COM的問題)

+0

我認爲在Java的早期,有一種趨勢是通過擴展Thread來提供run方法,而不是傳遞Runnable。這取決於Thread實現Runnable,因此具有run方法。 – 2013-02-11 09:14:02

+0

@PatriciaShanahan:當然,這也是一個糟糕的主意:)最好的實踐已經開始了,這真是太好了......我們永遠都會被設計得很糟糕的圖書館所困擾,這真是一種遺憾...... – 2013-02-11 09:15:06

2

當啓動Thread時,由JVM調用run方法。默認實現不做任何事情。您的變量T是正常的Thread,沒有Runnable'目標',因此其方法永遠不會被調用。你既可以提供ThreadExample一個實例線程的構造函數或有ThreadExample延長Thread

new ThreadExample().start(); 
// or 
new Thread(new ThreadExample()).start(); 
0

你也可以做到這way.Do不是在你的主類實現Runnable,而是創建一個內部類您main類中這樣做:

class TestRunnable implements Runnable{ 
    public void run(){ 
     System.out.println("Thread started"); 
    } 
} 

初始化它從主類的main方法中:

TestRunnable test = new TestRunnable(); 
Thread thread = new Thread(test); 
thread.start();