Announcement

Collapse
No announcement yet.

Wait/notify Mechanismen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wait/notify Mechanismen

    hallo,

    ich möchte eine Multithread-Anwendung in Java schreiben. In der Anwendung gibt es 4 Threads inclusive Hauptthread. Ein Buffer wird von jeweils zwei Threads zugegriffen. Ein Thread füllt es, während der Andere es leert. Deswegen möchte ich die Wait/Notify Mechanismen dazu anwenden, damit ein Thread unnötig arbeiten muss, wenn der Buffer leer ist.

    Ich habe folgende massen eingegangen. aber ich habe die Wait/Notify nicht richtig anwenden können. weiss ich nicht, was ich noch dazu machen sollte.
    1. Zweite Thread starten.
    2. In erstem Thread irgendwo mache ich:
    Code:
      while (n.hasNext())
    	 {
    	    Node node = n.next();
    	    EList<Datum> args = node.getArguments();
    	    if (args.size() == 0)
    	    {
    		  synchronized (qc.getConsumers())
    		  {
    			qc.getConsumers().add(node);  //  Buffer ist den beiden bekannt.
    			n.remove();
    
    		  }
    	    }
    	 }
    	 synchronized (zweitenThread)
    	 {
    	    zweiten Thread.notify();
    	 }
    in zweiten Thread in Run sieht wie folgt aus:
    Code:
     
     while (!stop)
    	 {
    
    	    try
    	    {
    		  getConsumer();
    		  getNewConsumer();
    		  checkForStopThread();
    
     synchronized (this)
    		  {
    			synchronized (qc.getReadyConsumers())
    			{
    			   while (qc.getReadyConsumers().size() == 0)
    			   {
    				 this.wait();
    			   }
    			}
    		  }
    		 
    		 
    	    } catch (InterruptedException e)
    	    {
    		  e.printStackTrace();
    	    }
    	 }
       }
    Das Problem ist, dass ich den Thread nicht aufwecken kann, nachdem es geschlafen hat.

    könnte jemand mir hilfen, wie ich so was realisieren kann? vielen Dank und frohes Weihnachten wünsche Euch noch...

    Burkut

  • #2
    Warum lässt du den 2. Thread nicht einfach laufen?

    Nach

    while (!stop)

    prüfst du, ob etwas im Buffer ist. Wenn ja wird es bearbeitet, wenn nicht läuft er in der while-Schleife
    Christian

    Comment


    • #3
      Originally posted by Christian Marquardt View Post
      wenn nicht läuft er in der while-Schleife
      genau das möchte vermeiden. ist das nicht so besser?oder macht keinen Unterschied, wenn ich immer wieder aufwecken muss?

      Comment


      • #4
        http://www.tutorials.de/forum/java/2...nd-notify.html
        Christian

        Comment


        • #5
          Originally posted by Christian Marquardt View Post
          ich habe auch nach dem Bespiel meine Test Anwendung probiert. sollte es unbedingt folgende Zeile da sein?
          private static ExecutorService service = Executors.newCachedThreadPool();

          public static void main(String[] args) {

          service.execute(new MasterThread());

          }

          kann ich den Thread nicht einfach mit mit Start Methode starten?

          gruss

          Burkut

          Comment

          Working...
          X