java如何从扩展线程类获取变量值

java如何从扩展线程类获取变量值,java,Java,你能帮我了解一下java线程吗。我有两个java类,我的扩展线程类有参数,在我的主类中我如何得到变量“runBoolean” 公共类MyMaster{ 公共静态void main(字符串[]args)引发InterruptedException{ 线程[]线程=新线程[2]; 对于(int i=1;i如果线程数组将填充MyThreads,那么我们可以这样定义数组: MyThread[] threads = new MyThread[2]; System.out.println(threads[

你能帮我了解一下java线程吗。我有两个java类,我的扩展线程类有参数,在我的主类中我如何得到变量“runBoolean”

公共类MyMaster{
公共静态void main(字符串[]args)引发InterruptedException{
线程[]线程=新线程[2];

对于(int i=1;i如果线程数组将填充MyThreads,那么我们可以这样定义数组:

MyThread[] threads = new MyThread[2];
System.out.println(threads[i-1].runBoolean);
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 ?

            }
然后在代码中,您可以得到如下值:

MyThread[] threads = new MyThread[2];
System.out.println(threads[i-1].runBoolean);
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 ?

            }
不过,我还有一些意见。首先,您的循环有点奇怪;)我将其更改为:

 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

 }
如果要处理线程内抛出的异常,它们必须是RuntimeExceptions(否则它们要求您在线程内捕获它们)。在这种情况下,您需要exceptionHandler和类似的东西:

MyThread[] threads = new MyThread[2];
System.out.println(threads[i-1].runBoolean);
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 ?

            }

但这是一个糟糕的设计,您不必这样做。如果您想等待线程的结果(而不是如上所示访问其属性),那么您应该使用Callable并等待答案。

要从类外部访问属性,您可以将此属性设置为公共属性(不推荐)或创建getter方法

在MyThread类中,添加一个仅返回属性值的方法
runBoolean
。这称为getter,因为它基本上是一个允许获取属性值的方法

public boolean getRunBoolean() {
    return runBoolean;
}

您可以在
MyThread
中添加一个getter方法,如
getRunBoolean()
,该方法返回布尔值(在这种情况下,
Thread[]threads=new Thread[2]
应该是
MyThread[]threads=new MyThread[2]
)。我希望通过线程[i-1]从try catch block获得通知,不添加方法,还有其他建议吗?我有一些MyThread类,比如MyThread1、MyThread2、MyThread3,所以我不确定调用MyThread,可能是另一个:)另外,您可以使用可调用接口而不是“扩展线程”