强制线程到上下文切换

时间:2018-04-12 07:50:48

标签: java multithreading runnable thread-sleep

我有一个函数foo,我想在其中创建并启动一个线程但延迟它运行完成,直到foo返回。

我通过在新线程中引入延迟来实现这一点,使用对sleep的调用,有效地(我认为)导致上下文切换。

String foo()
{
    // do some stuff

    Runnable task1 = () -> 
    {
        Thread.sleep(100);

        // do some stuff
    };

    // start the thread
    new Thread(task1).start();

    return "bar";
}

似乎有效 - 即foo总是在task1执行其操作之前返回。

使用sleep正确的方法吗?或者有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用Semaphore来正确控制所有内容。

String foo() {
    Semaphore waitUntilWeReturn = new Semaphore(-1);
    Runnable task1 = new Runnable() {
        @Override
        public void run() {
            awaitPermissionToProceed();
            // do some stuff

        }

        private void awaitPermissionToProceed() {
            try {
                waitUntilWeReturn.acquire();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    };

    // start the thread
    new Thread(task1).start();

    waitUntilWeReturn.release();
    return "bar";
}