2016-05-01 10 views
0

Wie kann ich die myCount-Variable serialisieren, die von jedem Thread im exklusiven Modus erhöht wird? später nächsten Thread inkrementieren sie basierend auf dem neuen Wert von myCount? also wird myCount nacheinander um Threads erhöht?Wie wird die myCount-Variable serialisiert?

Derzeit mein Ergebnis wie folgt:

starting main thread---- 
    -----this is Main1 
    ex Thread:2 
    ex Thread:3 
    -----this is Main3 
    ex Thread:4 
    -----this is Main4 
    ex Thread:5 
    -----this is Main5 
    -----this is Main6 
    ex Thread:7 
    -----this is Main8 
    ex Thread:9 
    -----this is Main10 
    ex Thread:11 

--------------- Code ---------------- ---

class MySamThread extends Thread { 
    public static int myCount=0; 
    public void run() { 
    while(MySamThread.myCount<=10){ 
     try{System.out.println("ex Thread:"+(++MySamThread.myCount)); 
      Thread.sleep(100);   
     }catch (InterruptedException iex){ 
     System.out. println("exception in thread:"+iex.getMessage());} 
     }}} 


    public class RunSamThread { 
    public static void main (String a[]){ 
    System.out.println("starting main thread----"); 
    MySamThread mst=new MySamThread(); 
    mst.start(); 
    while(MySamThread.myCount<=10){ 
     try{ 
      System.out.println("-----this is Main"+ 
    (++MySamThread.myCount)); 
      Thread.sleep(100); 
     } catch (InterruptedException iex){`` 
      System.out.println("exception in main 
    thread"+iex.getMessage());}  
    }}} 

Vielen Dank für Ihre hilft!

Antwort

1

Ich denke, Sie fragen, wie man synchronisiert und nicht serialisiert?

Sie eine Methode in MySamThread hinzufügen können als
public static synchronized int incrementCount() { return ++mycount; }
folgt und statt ++MySamThread.myCount von Haupt- und den Thread aufrufen, rufen MySamThread.incrementCount()
Dadurch wird sichergestellt, dass nur ein Thread zu einem Zeitpunkt der Zählung erhöht.

+0

@ Lulu Verwendung von serialize ist angemessen, obwohl ich sagen könnte, "serialize Zugriff auf myCount". – markw

+0

Sehr Sorry für späte Antwort! Ich bin gerade zurück zum Forum heute. Ich werde es anhand Ihrer Hilfe hier versuchen. Vielen Dank für Ihre freundliche Antwort hier! – Lulu