在自己的线程中调用多个方法

时间:2018-10-31 15:28:22

标签: java multithreading methods

所以我有3种方法,walk()jog()run()。我想在各自独立的线程中运行每个方法。与此类似的大多数问题都说代码/方法在public void run()下,但是我只想一次只使用一种方法。有没有一种方法可以将所有这些对象都不放在public void run()下?

4 个答案:

答案 0 :(得分:0)

如果您使用的是Java8 +,则可以使用Lambda表达式:

YEAR - SUM
2015 - 10
2016 - 20
2017 - 20
2018 - 38

此外,您可以将它们替换为“方法引用”

Thread t1 = new Thread(() -> walk());
Thread t2 = new Thread(() -> jog());
Thread t3 = new Thread(() -> run());

答案 1 :(得分:0)

如果您还不知道Lambda表达式是什么(正如您所说的那样),则还可以创建Thread对象的实例,然后在每个对象的run方法中执行所需的任何操作。例如:

Thread walk = new Thread() {
    public void run() {
        System.out.println("walking");
    }
};
walk.start();

答案 2 :(得分:0)

Thread类较旧;从Java 7开始,java.util.concurrent下的类是首选。

ExecutorService executor = Executors.newFixedThreadPool(3);
List<Future<?>> result = executor.invokeAll(Arrays.asList(
                                 ()->walk(),
                                 ()->jog(),
                                 ()->run()));
executor.shutdown();
executor.awaitTermination(1, TimeUnit.HOURS);

答案 3 :(得分:0)

这里是一个使用(旧的)Thread类的锻炼类的示例,该类使用不同的方法走路,慢跑或跑步。通过为每种运动类型创建新的类实例,可以在不同的线程中执行这三种方法

public class Excercise implements Runnable {
  enum ExcerciseType {
    WALKING,
    JOGGING,
    RUNNING
  };

  private final ExcerciseType excerciseType;
  public Thread thread;

  public Excercise(ExcerciseType type) {
    excerciseType = type;
  }

  public void start() {
    thread = new Thread(this);
    thread.start();
  }

  @Override
  public void run() {
    try {
      switch (excerciseType) {
        case WALKING:
          walk();
          break;
        case JOGGING:
          jog();
          break;
        default:
          running();
          break;
      } 
    } catch (InterruptedException e) {
      return;
    }
  }

  public void walk() throws InterruptedException {
    System.out.println("Started walking");
    Thread.sleep(3000);
    System.out.println("Done walking");
  }

  public void jog() throws InterruptedException {
    System.out.println("Started jogging");
    Thread.sleep(2000);
    System.out.println("Done jogging");
  }

  public void running() throws InterruptedException {
    System.out.println("Started running");
    Thread.sleep(1000);
    System.out.println("Done running");
  }

  public static void main(String[] args) {
    Excercise e1 = new Excercise(ExcerciseType.WALKING);
    e1.start();

    Excercise e2 = new Excercise(ExcerciseType.JOGGING);
    e2.start();

    Excercise e3 = new Excercise(ExcerciseType.RUNNING);
    e3.start();
  }
}