如果是这样,怎么样?我需要在每个实例中有2个run方法。
我的意思是用于线程的run方法。
我需要的更像是两辆车的比赛。每个汽车都应该在一个扩展Thread的类中有一个名称和一个run()方法。我将不得不打电话给我主打的两辆车,看看哪辆会赢。第一个或第二个。我在启动程序时需要帮助
答案 0 :(得分:6)
一个类不能包含两个具有相同签名的方法。方法的签名是其名称后跟其参数。
因此,您可能在同一个班级中拥有run(int)
和run(String)
以及run()
。这称为方法重载。你不能有两个run()
方法,因为你(和编译器)在调用obj.run()
时无法知道要执行哪一个。
答案 1 :(得分:5)
Thread t1 = new Thread(new Runnable(){public void run(){...}})
Thread t2 = new Thread(new Runnable(){public void run(){....}})
t1.start();
t2.start();
通过使用内部类,您可以在单个类中实现多个运行方法。
答案 2 :(得分:3)
为什么?我假设您正在讨论实现runnable接口,因此您需要两个带签名的方法:public void run();
?
有两个方法具有相同的签名是没有意义的;从代码中的其他地方调用方法时,您如何区分它们?
如果你想在调用run()
时根据某个条件发生两件不同的事情,那么你需要在方法的开头添加一个条件语句:
public void run() {
if (some_condition) {
// code for the first scenario
} else {
// code for the second
}
}
答案 3 :(得分:3)
尝试:
public class Car extends Thread
{
public String name;
public Car(String name)
{
this.name = name;
}
public void run()
{
//your code
}
}
public static void main(String[] args)
{
Thread car1 = new Car("car1's name");
Thread car2 = new Car("car2's name");
car1.start();
car2.start();
}
你可以将你的逻辑添加到Car.run()中,但基本上我就是这样做的。在您的逻辑中确定它何时开始和结束。当两个线程完成时,您可以看到哪一个是赢家。你也可以添加一个while循环,并在Car中有一个布尔类型的字段,以确定它是否已完成。
答案 4 :(得分:1)
正如您所问,您想知道在实现Runnable接口的类中是否可以有多个run()
方法,或者扩展Thread类。
您可以考虑一下线程的定义。线程是一个包含在进程内的单个指令块,这就是为什么线程被称为轻量级进程。通常,线程只执行特定任务。
当程序的主进程需要在后台执行多个操作时,例如自动保存或语法检查,如果主程序是文字处理器,则创建新线程。这是multithreading的概念。
现在,如果您阅读Runnable
或Thread
API,您可以看到扩展Thread
类或实现Runnable
类的类覆盖(以防万一)您正在扩展Thread
类)run()方法或实现抽象方法run()
(如果您正在实现Runnable
类)。
正如其他用户所说,您可以使用重载技术。您可以在类中使用不同的签名实现另一个run()
方法,因为拥有相同签名的多个方法不是一种法律实践(当您必须调用其中一个时,它会为编译器产生混淆)和因为它没有意义。
但是,请记住,在线程启动时,使用例如Thread.start()
,然后该方法将始终使用空签名调用您之前定义的run()
方法。只能在线程的主run
方法中调用另一个run(String s)
方法,并使用不同的签名run()
。
例如:
public class Thread implements Runnable{
public void run(){
//instructions
Object o = new Object();
run(o);
}
public void run(Object o){
//other instructions
}
}
public class OtherClass{
Thread t = new Thread();
t.start(); //this will invoke the main run() method!
}