2012-07-13 97 views
1

這是我現在的代碼,不幸的是繼承的類不能在單獨的線程中運行我想要繼承的類在單獨的線程中運行。請告訴我這樣做的最好方法是什麼。多線程和繼承

問候!

主要

public class Main 
{ 
    public static void main(String[] args) 
    { 
    new Thread(new ClassA(country, category, false, false)).start(); 
    } 
} 

A類

ClassA extends Common implements Runnable 
{ 
    volatile String country; 
    volatile String category; 
    volatile Boolean doNotReset; 
    volatile Boolean doNotFlash; 

    public ClassA(String country, String category, Boolean doNotReset, Boolean doNotFlash)   
    { 
    this.country = country; 
    this.category = category; 
    this.doNotReset = doNotReset; 
    this.doNotFlash = doNotFlash; 
    } 

    @Override 
    public void run() 
    { 

    } 
} 

常見

public class Common 
{ 
    Common() 
    { 
    Thread t = Thread.currentThread(); 
    String name = t.getName(); 
    System.out.println("name=" + name); 
    } 
} 

回答

6

你的繼承類ACTU盟友在單獨的線程中運行,但您的currentThread調試是在主方法的線程內完成的,而不是Runnable ClassA實例。在線程本身實際啓動之前,ClassA實例被構造(並因此調用Common構造函數),所以在構造函數中調用Thread.currentThread()仍然是主線程。

要修復打印預期結果的調試,可以將Common構造函數的主體移動到Common或ClassA中的overriden run()方法(只要它仍然是調用的run()方法,如多態)。

0

只有run()方法的主體將在不同的線程中執行。而且,只有當你撥打Thread.start()。其餘的構造函數和其他方法將在當前線程中執行。

可以使用匿名類實現Runnable調用構造函數在一個新的線程:

new Thread(new Runnable(){ 
    new ClassA(country, category, false, false); 
}).start();