Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaでのスレッド干渉エラー


スレッド干渉エラーの概念を理解するための例を見てみましょう-

import java.io.*;
class Demo_instance{
   static int val_1 = 6;
   void increment_val(){
      for(int j=1;j<11;j++){
         val_1 = val_1 + 1;
         System.out.println("The value of i after incrementing it is "+val_1);
      }
   }
   void decrement_val(){
      for(int j=1;j<11;j++){
         val_1 = val_1 - 1;
         System.out.println("The value of i after decrementing it is "+val_1);
      }
   }
}
public class Demo{
   public static void main(String[] args){
      System.out.println("Instance of Demo_instance created");
      System.out.println("Thread instance created");
      final Demo_instance my_inst = new Demo_instance();
      Thread my_thread_1 = new Thread(){
         @Override
         public void run(){
            my_inst.increment_val();
         }
      };
      Thread my_thread_2 = new Thread(){
         @Override
         public void run(){
            my_inst.decrement_val();
         }
      };
      my_thread_1.start();
      my_thread_2.start();
   }
}

出力

Instance of Demo_instance created
Thread instance created
The value of i after incrementing it is 7
The value of i after incrementing it is 7
The value of i after decrementing it is 6
The value of i after incrementing it is 8
The value of i after decrementing it is 7
The value of i after incrementing it is 8
The value of i after incrementing it is 8
The value of i after decrementing it is 7
The value of i after incrementing it is 9
The value of i after decrementing it is 8
The value of i after decrementing it is 7
The value of i after decrementing it is 6
The value of i after decrementing it is 5
The value of i after decrementing it is 4
The value of i after decrementing it is 3
The value of i after decrementing it is 2
The value of i after incrementing it is 3
The value of i after incrementing it is 4
The value of i after incrementing it is 5
The value of i after incrementing it is 6

「Demo_instance」という名前のクラスは静的な値を定義し、void関数「increment_val」は一連の数値を繰り返し、それをインクリメントしてコンソールに表示します。 「decrement_val」という名前の別の関数は、一連の数値を繰り返し処理し、毎回デクリメントして、出力をコンソールに表示します。

Demoという名前のクラスには、クラスのインスタンスを作成し、新しいスレッドを作成するmain関数が含まれています。このスレッドはオーバーライドされ、run関数がこのオブジェクトインスタンスで呼び出されます。 2番目のスレッドについても同じことが行われます。次に、これらのスレッドは両方とも「開始」関数で呼び出されます。


  1. Javaのユーザースレッドとデーモンスレッド?

    デーモンスレッド 通常、ユーザースレッドのサービスを実行するために使用されます。 main()メソッド アプリケーションスレッドのユーザースレッド(非デーモンスレッド) 。 JVM すべてのユーザースレッド(デーモン以外)がない限り、終了しません 終了します。 ユーザースレッドによって作成されたスレッドを明示的に指定できます setDaemon(true)を呼び出してデーモンスレッドになる 。メソッドisDaemon()を使用して、スレッドがデーモンスレッドであるかどうかを判断するには 。 例 public class UserDaemonThreadTest extends Thre

  2. 修正:ERR_SOCKET_NOT_CONNECTED

    Google Chromeユーザーには、「 ERR_SOCKET_NOT_CONNECTED」というエラーメッセージが表示されます。 」ブラウザでGoogleのウェブサイトにアクセスしようとしたとき。このエラーメッセージには、いくつかの異なるシナリオがあります。 1つはユーザーがどのウェブサイトにもアクセスできない場合、もう1つはGoogleサイトを除くすべてのウェブサイトにアクセスできる場合です。 このエラーメッセージは、ブラウザのソケットに問題があることを示しています。ソケットは、インターネット上で実行されている2つのプログラム間の双方向通信の1つのエンドポイントと考えることができます