Как узнать, какой поток (имя) был выполнен из будущего объекта - PullRequest
2 голосов
/ 27 мая 2020

Приведенный ниже код - это то, что я создаю экземпляром службы отправки для службы исполнителя, и его результат - это то, что я сохраняю в будущем объекте. Есть ли способ увидеть имя потока, который дал результат от будущего объекта. Например, если поток 1 возвращает целочисленное значение 4, и это значение сохраняется в будущем объекте. Как я могу сказать, что поток 1 был тем, который выполнил и вернул это значение 4? Не стесняйтесь уточнить, если я не объяснил должным образом.

class Test implements Callable<Integer>{
  Integer i;
  String threadName;

   public Test(Integer i){
     this.i = i;
   }

  public Integer call() throws Exception{
    threadName = Thread.currentThread().getName();
    System.out.println(Thread.currentThread().getName());
    Thread.sleep(i * 1000);
    return i ;
  }

  public String toString(){
    return threadName;
  }
}

1 Ответ

2 голосов
/ 27 мая 2020

Вместо Integer вы можете вернуть объект, содержащий результат и имя потока:

public static class ResultHolder {
    public Integer result;
    public String threadName;
}

[...]

public ResultHolder call() throws Exception {
    ResultHolder ret = new ResultHolder();
    ret.threadName = Thread.currentThread().getName();
    ret.result = i;
    Thread.sleep(i.intValue() * 1000);
    return ret;
}
...