Как выполнить два метода, принимающих работающий экземпляр одного и того же класса в разных потоках? - PullRequest
0 голосов
/ 18 апреля 2020
class FooBar {
    private int n;

    public FooBar(int n) {
        this.n = n;
    }

    public void foo(Runnable printFoo) throws InterruptedException {

        for (int i = 0; i < n; i++) {

            // printFoo.run() outputs "foo"
            printFoo.run();
        }
    }

    public void bar(Runnable printBar) throws InterruptedException {

        for (int i = 0; i < n; i++) {

            // printBar.run() outputs "bar"
            printBar.run();
        }
    }
}

В приведенном выше коде, как выполнять методы foo и bar в разных потоках в одном и том же экземпляре класса FooBar?

Вопрос от LeetCode. Мне любопытно узнать, как это будет проверено. Ссылка на проблему: https://leetcode.com/problems/print-foobar-alternately/

1 Ответ

0 голосов
/ 18 апреля 2020

Я вижу здесь 2 ошибки:

  1. Вам не нужно 2 метода для одного и того же.
  2. Чтобы запустить поток с Runnable, вы никогда не вызываете run method.

Это правильный путь:

class FooBar {

    public void executeRunnable(Runnable printFoo) throws InterruptedException {
            // printFoo.run() outputs "foo"
            new Thread(printFoo).start();
    }


 public static void main(String... args) {
    FooBar fooBar = new FooBar();
    fooBar.executeRunnable(new Runnable1());
    fooBar.executeRunnable(new Runnable2());
  }   
 }

Представьте, что Runnable1 пишет «foo», а Runnable2 пишет «Bar»

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