[英]java how to get variable value from extends thread class
你能幫我有關Java線程的問題嗎? 我有兩個Java類,我的擴展線程類具有參數,在MyMaster類中如何獲取變量“ runBoolean”?
public class MyMaster {
public static void main(String[] args) throws InterruptedException {
Thread[] threads = new Thread[2];
for(int i=1; i<=2; i++) {
threads[i-1] = new MyThread(i);
threads[i-1].join();
//what to do ?
}
}
}
public class MyThread extends Thread{
int myBil;
boolean runBoolean;
public MyThread(int bil) {
myBil = bil;
start();
}
@Override
public void run() {
try {
System.out.println(myBil);
runBoolean = true;
} catch (Exception e) {
runBoolean = false;
//what to do ?
}
}
}
如果線程數組將被MyThreads填充,那么我們可以這樣定義數組:
MyThread[] threads = new MyThread[2];
然后,在您的代碼中就可以得到這樣的值:
System.out.println(threads[i-1].runBoolean);
我還有更多評論。 首先,您的循環有點奇怪;)我將其更改為:
for(int i=0; i<2; i++) {
threads[i] = new MyThread(i);
threads[i].join();
System.out.println(threads[i].isRunBoolean()); //Add a getter for that
}
最好習慣於使用0作為第一個索引。 並通過getter和setter訪問屬性:
public class MyThread extends Thread{
private int myBil;
private boolean runBoolean;
public boolean isRunBoolean() {
return runBoolean;
}
..... Class body continues here....
}
如果要處理在線程內引發的異常,則它們必須是RuntimeExceptions(否則,它們要求您在線程內捕獲它們)。 在這種情況下,您將需要exceptionHandler和類似的東西:
Thread.UncaughtExceptionHandler exceptionHandler = new Thread.UncaughtExceptionHandler() {
public void uncaughtException(Thread th, Throwable e) {
System.out.println("Exception: " + e);
}
};
for(int i=0; i<2; i++) {
threads[i] = new MyThread(i);
threads[i].setUncaughtExceptionHandler(exceptionHandler);
threads[i].join();
System.out.println(threads[i].isRunBoolean());
//what to do ?
}
然后在線程中
@Override
public void run() {
try {
System.out.println(myBil);
runBoolean = true;
} catch (Exception e) {
runBoolean = false;
throw new RuntimeException("this is a bad plan!");
}
}
但是,這是一個糟糕的設計,您不必這樣做。 如果要等待線程的結果(而不是如上所示訪問其屬性),則應使用Callable並等待答案。
要從類外部訪問屬性,可以將該屬性設置為public
屬性(不建議使用),也可以創建一個getter方法。
在您的類MyThread中,添加一個僅返回屬性runBoolean
的值的runBoolean
。 這被稱為吸氣劑,因為它基本上是一種允許獲取屬性值的方法。
public boolean getRunBoolean() {
return runBoolean;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.