程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> java-從線程中返回值的相關問題

java-從線程中返回值的相關問題

編輯:編程綜合問答
從線程中返回值的相關問題

程序的方法中有一個 HandlerThread。在線程中改變了一個值,然後我想把它返回到 test()方法。有什麼方法能實現呢?

public void test()
{   
    Thread uiThread = new HandlerThread("UIHandler"){
        public synchronized void run(){
            int value; 
            value = 2; //To be returned to test()
        }
    };
    uiThread.start();
}

最佳回答:


你可以使用一個本地的 final 變量,變量需要是 non-primitive 類型,所以你可以使用一個數組。也需要同步兩個線程,例如使用一個 CountDownLatch:

public void test()
{   
    final CountDownLatch latch = new CountDownLatch(1);
    final int[] value = new int[1];
    Thread uiThread = new HandlerThread("UIHandler"){
        @Override
        public synchronized void run(){
            value[0] = 2;
            latch.countDown(); // Release await() in the test thread.
        }
    };
    uiThread.start();
    latch.await(); // Wait for countDown() in the UI thread.
    // value[0] holds 2 at this point.
}

也可以使用 Executor 和 Callable:

public void test() throws InterruptedException, ExecutionException
{   
    ExecutorService executor = Executors.newSingleThreadExecutor();
    Callable<Integer> callable = new Callable<Integer>() {
        @Override
        public Integer call() {
            return 2;
        }
    };
    Future<Integer> future = executor.submit(callable);
    // future.get() returns 2
    executor.shutdown();
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved