2017-06-08 1 views
0

aktualisiert und verwendet, werden Benutzer nicht an die ArrayList angehängt und nur ein Element gedruckt, das von diesem Thread eingefügt wird. Welche Änderungen müssen hier vorgenommen werden?Wie man ein Objekt in main() von einer anderen Thread-Klasse in java

Ich habe versucht, synchronisiert (Benutzer), aber immer noch nicht arbeiten.

/*This is the main Class from which threads are created*/ 
public class MultiThread { 

    List<String> users = Collections.synchronizedList(new ArrayList<String>()); 
    public static MyThread[] threads=new MyThread[10]; 
    public static void main(String[] args) throws IOException { 
     while(true){ 
      for(int i=0;i<10;i++){ 
      if(threads[i]==null){ 
         (threads[i] = new MyThread().start(); 
         break; 
      } 
      } 
     } 
    } 

    /*Adding names to Arraylist */ 

    public synchronized void adduser(String user){ 
     users.add(user); 
    } 
    /*print Array elements */ 
    public void iter(){ 
     Iterator<String> foreach = users.iterator(); 
     while (foreach.hasNext()) System.out.println(foreach.next()); 
    } 
} 

class MyThread extends Thread { 

    private BufferedReader in=null; 
    public void run(){ 
     MultiThread obj=new MultiThread(); 
     in = new BufferedReader(new InputStreamReader()); 
     System.out.println("Enter you name"); 
     name=in.readLine(); 
     obj.adduser(name); 
     System.out.println("Current Users are:"); 
     obj.iter(); 
    } 
} 

Antwort

0

Sie haben keine ArrayList, die über Threads geteilt wird. Jedes MyThread-Objekt erstellt seine eigene Instanz von MultiThread und fügt daher eine eigene ArrayList hinzu.

Sie müssen entweder MultiThread.users statisch und adduser statisch machen oder ein MultiThread-Objekt außerhalb von MyThread erstellen und diese MultiThread-Instanz an jedes MyThread-Objekt übergeben.

0

Sie müssen das gleiche Objekt MultiThread an alle Ihre Threads übergeben. Alle Threads erstellen neue Instanzen von MultiThread Objekten.

Verwandte Themen