从线程调用函数

时间:2013-07-17 16:32:56

标签: java multithreading

我是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
    }
}

3 个答案:

答案 0 :(得分:1)

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

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

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

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

示例:

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();
   }
}

答案 1 :(得分:1)

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

语句o.th将使编译器在Demo类中查找名为th的公共静态类级别字段。由于Demo类中没有这样的字段,因此会出错。

答案 2 :(得分: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();
    }
}