2017-06-06 3 views
0

から取得し、店舗の値にJavaでスレッドここに私は、マルチスレッドを使用して、ユーザーから名前を取得するためのコードを書きましたが、結果はは、マルチユーザー

予期せぬ入力

 
as 
as 
dd 
ff 
ee 
ew 
qq 
ff 
hh 
tt 

出力です:

 
as 
ff 
ew 
hh 
tt 
qq 
ff 
null 
null 
null 

最後に3文字のヌル文字が表示されています。私は2つのスレッドを作成し、各スレッドに対して5回の反復を割り当てました。

package Pack; 
import java.util.Scanner; 
public class add implements Runnable 
{ 
    int value[]; 
    public add(int[] value) 
    { 
     this.value=value;  
    } 
    public void run() 
    { 
     @SuppressWarnings("resource") 
     Scanner in= new Scanner(System.in); 
     for(int i:value) 
     { 

      Thread1.str[i]=in.nextLine(); 
     } 
    } 
} 
package Pack; 

public class Thread1 { 
    public static String[] str= new String[10]; 

    public static void main(String[] args) throws InterruptedException 
    { 

     Thread[] th= new Thread[2]; 
     add a[]=new add[2]; 
     int num[]={0,1,2,3,4,5,6,7,8,9}; 
     for(int i=0;i<2;i++) 
     { 
      int part[]= new int[5]; 
      for(int j=0;j<5;j++) 
      part[j]= num[i*2+j]; 
      a[i]= new add(part); 
      th[i]= new Thread(a[i]); 
     } 
     for(Thread th1 : th) 
     { 
      System.out.println(th1.getName()); 
      th1.start(); 
     } 
     for(Thread th1 : th) 
      th1.join(); 
     for(String num1:str) 
     { 
      System.out.println(num1); 
     } 

    } 
} 
+1

あなたのプログラムが何をすべきか、そして期待される出力が何であるかを説明してください。スレッドがここで何をすべきかについても説明する。 – RealSkeptic

+0

ここでは、ユーザーから10個の名前を取得し、変数に格納し、マルチスレッドを使用して印刷しています。そこで私は、それぞれ5回の繰り返しを実行する2つのスレッドを作成しました。私は上記のように入力を与えましたが、それを印刷すると、&値と3つのnullが表示されます。 – Magneto

+1

ようこそスタックオーバーフロー! [ツアー](http://stackoverflow.com/tour)を見て回り、[ヘルプセンター](http://stackoverflow.com/help)、特に[どのように私に質問しますか良い質問?](http://stackoverflow.com/help/how-to-ask)と[ここで私はどのような話題を聞くことができますか?](http://stackoverflow.com/help/on-topic)。 [Java命名規則](http://www.oracle.com/technetwork/java/codeconventions-135099.html) –

答えて

0

ここでの問題は、を隠しOOP 情報や懸念の単一責任/分離原則的に主要な原則の違反です。

ストレージ(Stringアレイ)はクラスTread1にありますが、各スレッドがインデックスを個別にカウントするスレッドからアクセスします。これにより必然的に、配列内の同じインデックスへの二重アクセスが発生します。

関連する問題