程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> 多線程-java相同線程,不同方法線程內傳值問題

多線程-java相同線程,不同方法線程內傳值問題

編輯:編程解疑
java相同線程,不同方法線程內傳值問題

大家好,我想請問一個問題,比如
class A{
new Thread(() -> {
int a = 1;
B b = new B();
b.invokeB(a);
});
}

class B{
public void invokeB(int a){
C c = new C();
c.invokeC();
}
}

class C{
public void invokeC(){
//這裡我想用a的值,由於某些原因,不能直接把a傳過來,聽說用ThreadLocal可以實現,但是不太會用,有人能幫我麼,謝謝大家。
}
}

最佳回答:


第一,你的代碼有編譯錯誤,A類的那段代碼應該放在代碼塊中,而且new Thread並沒有start所以,沒有運行結果。
首先,你要知道ThreadLocal修飾的成員變量,它修飾類的成員變量,可以獲取當前線程存入的這個變量的副本。
其次,你的C方法,必須能跟這個a練習起來,那麼a必須定義為某個類的ThreadLocal類型的成員變量才能。而且它的訪問也是直接操作這個變量的。
你說的這種需求有點牽強,C類沒有與局部變量a的連接點,不可能得到a的值。而且你的B的invokeB(int a)已經有參數了卻沒有用。
你要真的想這麼用的話,要麼傳遞給C,要麼將a定義為全局靜態共享的變量。

 public class A {
    public static int a = 1;

    public static void main(String[] args) {
        new A().invokeA();
    }

    public void invokeA(){
        new Thread(() -> {
            //設置當前線程的a的值
            B b = new B();
            b.invokeB();
        }).start();//需要start啟動線程
    }
}

class B {
    public void invokeB() {
        C c = new C();
        c.invokeC();
    }
}

class C {
    public void invokeC() {
        // 這裡我想用a的值,由於某些原因,不能直接把a傳過來,聽說用ThreadLocal可以實現,但是不太會用,有人能幫我麼,謝謝大家。
        System.out.println(A.a);
    }
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved