0

我是java的初学者。我一直在研究多线程。我想创建两个线程,这两个线程必须同时运行不同的方法。在这里,这些线程应该调用 sum 和 diff 方法并同时运行。但是我收到一个错误,该方法应该是线程类型的。如何实现它。

class Demo implements Runnable 
{
    void  sum()
    {
      //Some lines of code
    }

    void  diff()
    {
      //Some lines of code
    }        
    public void run ()
    {
       System.out.println("Inside run");
    }

 }



class Test 
{
    public static void main (String []args){
        Demo o = new Demo ();
        Demo o1 = new Demo ();
        Thread th = new Thread (o);
        Thread th1= new Thread(o1);
        th.start();
        th1.start();
        o.th.sum();  // getting error here
        o1.th1.diff(); // getting error here
    }
}
4

3 回答 3

1

首先,您有一个编译错误,因为您试图将变量引用th为 Demo 类型对象上的字段。th不是字段,而是局部变量,可以直接引用(即不带o.前缀)。其次,sum()不能diff()针对 Thread 的实例调用,因为这些方法不是由线程定义的,而是由您自己的 Demo 类定义的。

尽管如此,这些编译问题甚至不是这段代码的根本问题。根据您的代码,您似乎对 Java 程序的语法和结构有一些基本的误解,因此在尝试处理并发编程之前阅读一些入门级教程可能会对您有所帮助。但是,为了完整起见,这里简要说明您需要做什么才能使您的程序正常工作。

当您调用 Thread.start() 时,它将派生一个线程并调用您传递给该线程对象的构造函数的 Runnable 的 run() 方法。

为了调用这两个不同的方法,您需要创建两个不同的实现 runnable 的类,并将这两个方法实现放在它们的每个 run 方法中。

例子:

public class Sum implements Runnable {
   public void run() {
      //Add up your numbers
   }
}

public class Diff implements Runnable {
   public void run() {
      //Subtract numbers
   }
}


public class Test {
   public static void main(String[] args) {
      Thread sumThread = new Thread(new Sum());
      Thread diffThread = new Thread(new Diff());
      sumThread.start();
      diffThread.start();
   }
}
于 2013-07-17T16:48:26.523 回答
1

假设您遇到编译错误,则 o.th.sum() 语句不正确。

o.th 语句将导致编译器在 Demo 类中查找名为 th 的公共静态类级别字段。由于 Demo 类中没有这样的字段,因此您会收到错误消息。

于 2013-07-17T17:10:17.910 回答
0

您收到此错误是因为您尝试使用 Demo 类的对象访问 Thread 的局部变量,如果您希望它在单独的线程中运行,则不能直接调用该方法。只有当您在线程类上调用 start() 方法时才会产生一个新线程,然后它将执行 run() 方法中的代码。

根据您创建两个线程的要求,并且这两个线程必须同时运行不同的方法,以下代码应该可以工作。

class Demo implements Runnable 
{
    public void run ()
    {
       //sum() method code
    }
 }

class Demo1 implements Runnable 
{
    public void run ()
    {
    //diff() method code
    }
 }


class Test 
{
    public static void main (String []args){
        Demo o = new Demo ();
        Demo1 o1 = new Demo1 ();
        Thread th = new Thread (o);
        Thread th1= new Thread(o1);
        th.start();
        th1.start();
    }
}
于 2013-07-17T16:53:36.683 回答