0

私はJavaの初心者です。マルチスレッドについて勉強中です。2 つのスレッドを作成したいのですが、これら 2 つのスレッドは別々のメソッドを同時に実行する必要があります。ここで、これらのスレッドは 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

コンパイル エラーが発生していると仮定すると、ステートメント o.th.sum() は正しくありません。

ステートメント o.th により、コンパイラは Demo クラス内で th という名前の public static クラス レベル フィールドを検索します。Demo クラスにはそのようなフィールドがないため、エラーが発生します。

于 2013-07-17T17:10:17.910 に答える
0

Demo クラスのオブジェクトを使用して Thread のローカル変数にアクセスしようとしており、別のスレッドで実行する場合はメソッドを直接呼び出すことができないため、このエラーが発生しています。新しいスレッドは、スレッド クラスで start() メソッドを呼び出した場合にのみ生成され、run() メソッドでコードが実行されます。

2 つのスレッドを作成し、これら 2 つのスレッドが別々のメソッドを同時に実行する必要があるという要件に従って、次のコードが機能するはずです。

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 に答える