Функция ожидания в Java - PullRequest
4 голосов
/ 25 марта 2010

Итак, я пишу код Java для представления сортировки кучи и представления операции. Мне нужна функция ожидания, которая будет ожидать между различными операциями, но я не уверен, есть ли в Java функция, которая делает это или делает Мне нужно написать функцию самостоятельно и как мне это сделать.

Представление кучи спорта - это домашнее задание, но написание функции ожидания не так, поэтому я ценю вашу помощь

Ответы [ 6 ]

16 голосов
/ 25 марта 2010
3 голосов
/ 25 марта 2010

Если я вас хорошо понял, вы хотите создать параллелизм при выполнении разных задач, а затем дождаться завершения всех из них, чтобы продолжить. Это то, что вы хотите? Если ваш ответ «да», то, возможно, вы могли бы использовать фреймворк «fork / join» (Java 7)

Вот фрагмент кода, взятый из этой статьи Брайана Гетца (IBM Java guru):

public class MaxWithFJ extends RecursiveAction {
    private final int threshold;
    private final SelectMaxProblem problem;
    public int result;

    public MaxWithFJ(SelectMaxProblem problem, int threshold) {
        this.problem = problem;
        this.threshold = threshold;
    }

    protected void compute() {
        if (problem.size < threshold)
            result = problem.solveSequentially();
        else {
            int midpoint = problem.size / 2;
            MaxWithFJ left = new MaxWithFJ(problem.subproblem(0, midpoint), threshold);
            MaxWithFJ right = new MaxWithFJ(problem.subproblem(midpoint + 
              1, problem.size), threshold);
            coInvoke(left, right);
            result = Math.max(left.result, right.result);
        }
    }

    public static void main(String[] args) {
        SelectMaxProblem problem = ...
        int threshold = ...
        int nThreads = ...
        MaxWithFJ mfj = new MaxWithFJ(problem, threshold);
        ForkJoinExecutor fjPool = new ForkJoinPool(nThreads);

        fjPool.invoke(mfj);
        int result = mfj.result;
    }
}

В противном случае, если вам не нужен параллелизм и вы просто хотите подождать некоторое время, используйте функцию Thread.Sleep(int miliseconds).

3 голосов
/ 25 марта 2010

Вы можете попробовать Thread.sleep(1000);

Это заставит текущий поток спать в течение 1000 миллисекунд.

3 голосов
/ 25 марта 2010

Thread.sleep() - это то, что вы ищете.

Исключение, которое оно выдает, может озадачить вас, если вы новичок в Java. Скорее всего, вы захотите распространить его или отбросить и сбросить флаг прерывания, используя Thread.currentThread (). Interrupt ()

1 голос
/ 21 сентября 2015

Вот кое-что более глубокое:

try {
    Thread.sleep(1000); 
} catch (InterruptedException e) {
    e.printStackTrace();
}

Здесь мы вставили 1000 в качестве значения в миллисекундах или 1 секунду ожидания перед запуском остальной части вашего кода. Это работает с любой программой на Java.

1 голос
/ 22 декабря 2013

Я использовал более простой (но, возможно, не лучший) способ сна:

public static void sleep(int amt) // In milliseconds
{
    long a = System.currentTimeMillis();
    long b = System.currentTimeMillis();
    while ((b - a) <= amt)
    {
        b = System.currentTimeMillis();
    }
}

Это по сути приведет к тому, что все, что делает ваша программа, прекратится, пока не истечет время. Это также может вызвать небольшую задержку. Вы были предупреждены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...