1

我有那个代码:

主类:

public class myTest {

public static void main(String[] args) {

   try {
        Thread t1 = new Thread(new myThreadClass("thread 1"), "thread 1");
        t1.start();
    } catch (UnknownHostException ex) {
        Logger.getLogger(glownyTest.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(glownyTest.class.getName()).log(Level.SEVERE, null, ex);
    }  

 }
}

我的线程类

public class myThreadClass extends Thread {

private HashSet<String> texts = new HashSet<String>();

public myThreadClass(String id) throws UnknownHostException, IOException {}

@Override
public void run() {
     ... collecting Strings into my hashSet ....
}

public HashSet<String> getTexts() {
    return texts;
}
}

我试过打电话

t1.getTexts();

在启动线程后在我的主类中,但它不起作用 - 我想从我的主类级别访问文本 hashSet。如何实现?

4

4 回答 4

1

如果您尝试访问属于您的类型的方法,myThreadClass那么您需要确保将变量声明为该类型的实例。

像这样:

myThreadClass t1 = new myThreadClass("thread 1");

您可能会遇到一些问题......比如需要join确保Thread它完成填充HashSet.

于 2013-05-24T10:13:08.947 回答
0
myThreadClass t1 = new myThreadClass("thread 1");
t1.start()
try{
t1.join();
t1.getTexts();
}catch(InterruptedException x){
 ....
}

通常类名的第一个字母是大写。

于 2013-05-24T10:28:44.847 回答
0

不要滥用Thread你的程序逻辑类。您应该构建您的自定义Runnable实现,并将其传递给Thread的构造函数。这样,线程控制和程序逻辑之间的关注点分离对您来说将更加明显。

于 2013-05-24T10:12:38.403 回答
0

您可以创建 myThreadClass 的引用

myThreadClass t1

或者

将您的引用投射到 myThreadClass 之类

((myThreadClass )t1).getTexts();

这会奏效!!

于 2013-05-24T10:19:32.937 回答