2016-02-11 34 views
0

如何ClassThread可以訪問variable var來自Class1的實例創建了這個ClassThread實例?引用適當的對象實例volatile變量

ClassThread

public class ClassThread implements Runnable { 
    @Override 
    public void run() { 

    } 
} 

的Class1

public class Class1 implements Runnable{ 

    public volatile String var; 

    public Class1() { 

    } 

    @Override 
    public void run() { 
     for(int i = 0; i < 5; i++){ 
      ClassThread ct = new ClassThread(); 
      Thread t = new Thread(ct); 
      t.start(); 
     } 
    } 

} 

public class Main{ 
    public static void main(String[] args) { 
     for(int i = 0; i < 3; i++){ 
      Class1 cla = new Class1(); 
      Thread t = new Thread(cla); 
      t.start(); 
     } 
    } 
} 

回答

1

把它作爲一個參數構造函數:

public class ClassThread implements Runnable { 
    private volatile String var; 

    public ClassThread(String var) { 
     this.var = var; 
    } 

    @Override 
    public void run() { 

    } 
} 

而且在Class1,通過它,當你構建ClassThread

@Override 
public void run() { 
    for(int i = 0; i < 5; i++){ 
     ClassThread ct = new ClassThread(var); 
     Thread t = new Thread(ct); 
     t.start(); 
    } 
} 
+0

,然後轉換到通過volatile變量將是可見的另一個線程? –

+0

字符串是不可變的,你不能改變它。如果它是一個List或一個數組,那麼是的,你可以改變一個線程中的內容,然後其他線程會看到這些改變。但是有競爭條件和丟失更新的潛在可能性,請確保您在從多個線程更改變量之前理解同步。 –

+0

感謝您的回答 –

相關問題