在Java中:如何让线程监视另一个线程?

Joh*_*nny 5 java multithreading

对不起,如果问题很简单.我是初学者.

我必须创建调用某些东西的线程,而第一个线程工作,另一个必须测量第一个线程是否在指定时间内计算函数.如果没有,它必须抛出异常.否则它会返回答案.

mtr*_*aut 5

我将采用java.util.concurrent组件 - 简单的例子

public void myMethod() {
    // select some executor strategy
    ExecutorService executor = Executors.newFixedThreadPool(1);
    Future f = executor.submit(new Runnable() {
        @Override
        public void run() {
            heresTheMethodToBeExecuted();
        }
    });
    try {
        f.get(1000, TimeUnit.MILLISECONDS);
    } catch (InterruptedException e) {
        // do something clever
    } catch (ExecutionException e) {
        // do something clever
    } catch (TimeoutException e) {
        // do something clever
    }
}
Run Code Online (Sandbox Code Playgroud)


And*_*ell 3

让您的线程在完成时通知同步对象,并让您的其他线程等待 x 毫秒以使其完成。

public class Main {

private static final Object mThreadLock = new Object();

static class DoTaskThread extends Thread {

    public void run() {

            try {
                int wait = new Random().nextInt(10000);
                System.out.println("Waiting " + wait + " ms");
                Thread.sleep(wait);
            } catch (InterruptedException ex) {
            }
            synchronized (mThreadLock) {
                mThreadLock.notifyAll();
            }

        }
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        synchronized (mThreadLock) {
            DoTaskThread thread = new DoTaskThread();
            thread.start();

            try {
                // Only wait 2 seconds for the thread to finish
                mThreadLock.wait(2000);
            } catch (InterruptedException ex) {
            }

            if (thread.isAlive()) {
                throw new RuntimeException("thread took too long");
            } else {
                System.out.println("Thread finished in time");
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)