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