我可以在一个类中使用多个run方法吗?

时间:2011-09-27 12:55:06

标签: java

如果是这样,怎么样?我需要在每个实例中有2个run方法。

我的意思是用于线程的run方法。

我需要的更像是两辆车的比赛。每个汽车都应该在一个扩展Thread的类中有一个名称和一个run()方法。我将不得不打电话给我主打的两辆车,看看哪辆会赢。第一个或第二个。我在启动程序时需要帮助

5 个答案:

答案 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的概念。

现在,如果您阅读RunnableThread 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!
}