如何通过线程访问可运行对象?

2022-09-01 14:26:02

可能的重复:需要帮助返回线程中的对象运行方法

你好。我有一个实现 runnable 的类,我有一个 List,存储使用该类的不同对象实例化的线程。在给定运行基础对象的线程对象的情况下,如何访问这些对象的属性?下面是一个示例:

public class SO {
    public static class TestRunnable implements Runnable {
        public String foo = "hello";

        public void run() {
            foo = "world";
        }
    }

    public static void main(String[] args) {
        Thread t = new Thread(new TestRunnable());
        t.start();
        //How can I get the value of `foo` here?
    }
}

答案 1

我在java.lang.Thread文档中看不到任何方法可以做到这一点。

那么,我最好的答案是,您可能应该使用而不是(或补充) 。或者,也许您想要某种映射结构,以便您可以从线程访问Runnable。(例如,List<Runnable>List<Thread>java.util.HashMap<java.lang.Thread, java.lang.Runnable>)


答案 2

并发库很好地支持这一点。注意:如果你的任务抛出了一个异常,Future 将保留这个异常,并在你调用 get() 时抛出一个包装异常

ExecutorService executor = Executors.newSingleThreadedExecutor();

Future<String> future = executor.submit(new Callable<String>() { 
   public String call() { 
      return "world"; 
   } 
}); 

String result = future.get(); 

推荐