Gutes Threads Tutorial hier aber trotzdem eine Frage

  • Themenstarter Themenstarter filmhund
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
F

filmhund

Gast
Frage zu Threads

Hallo, folgenden Sachverhalt kapier ich nicht ganz..

ich habe folgende Klasse mit zwei separaten Threads:
Nun soll Thread2 einen Task simulieren, der 5 Sekunden dauert und in der Zeit soll Thread1 von 1 bis 5 zählen.
Wer erklärt mir diese Ausgabe bzw. wie kkomme ich zu der Lösung die ich will ??
Habt Dank
Code:
public class ThreadTest
{
	boolean fertig;
	
	public ThreadTest()
	{
		Thread thread1 = new Thread()
		{
			public void run()
			{
				int counter = 0;
				while (!fertig)
				{
					System.out.println(counter++);
				}
				try
				{
					Thread.sleep(1000);
				}
				catch (Exception e) {e.printStackTrace();}
			}		
		};
		
		Thread thread2 = new Thread()
		{
			public void run()
			{
				fertig = false;
				try
				{
					//soll einen Task simulieren der 5 Sekunden dauert
					//in der Zeit soll thread1 von 1 bis 5 Zählen
					Thread.sleep(5000);	
				}
				catch(Exception e) {e.printStackTrace();}	
				fertig = true;								
			}			
		};
		
		thread2.start();
		thread1.start();
	}
	
	public static void main(String args [])
	{
		new ThreadTest();
	}
}
 
Schit ich Dummy, sorry. Plötzlich ist es mir eingefallen.
So gehts. Verdammt. Aber trotzdem noch ne Frage: Was passiert eigentlich mit Thread2 ? Läuft der irgendwo im Nirwana weiter, wann muss oder sollte ich den manuell stoppen ?

Code:
public class ThreadTest
{
	boolean fertig;
	
	public ThreadTest()
	{
		Thread thread1 = new Thread()
		{
			public void run()
			{
				int counter = 0;
				while (!fertig)
				{
                                        //ich doofie hatte die falsche Reihenfolge

					try
					{
						Thread.sleep(1000);
					}
					catch (Exception e) {e.printStackTrace();}
					System.out.println(counter++);
				}
				
			}		
		};
		
		Thread thread2 = new Thread()
		{
			public void run()
			{
				fertig = false;
				try
				{
					//soll einen Task simulieren der 5 Sekunden dauert
					//in der Zeit soll thread1 von 1 bis 5 Zählen
					Thread.sleep(5000);	
				}
				catch(Exception e) {e.printStackTrace();}	
				fertig = true;								
			}			
		};
		
		thread2.start();
		thread1.start();
	}
	
	public static void main(String args [])
	{
		new ThreadTest();
	}
}
 
filmhund hat gesagt.:
Was passiert eigentlich mit Thread2 ? Läuft der irgendwo im Nirwana weiter, wann muss oder sollte ich den manuell stoppen ?
Der Thread wird beendet sobald keine weitere Anweisung mehr ausgeführt wird, hier also nach Thread.sleep(5000);
 
ProgressBarProblem.
Hallo, ich nochmal. Was sind die Gründe, warum bei diesem Codekonstrukt die Progressbar manchmal nicht startet. Meistens geht es, wenn nicht, bleibt die Progressbar einfach am Start stehen. Es scheint mir so, dass der progressTask gar nicht ausgeführt wird.
Muss ich da irgendwas anders machen. Ich habe zB noch überhaupt keine Gedanken über diese SwingUtilites Methoden gemacht, bzw verstehe das gar nicht mit dem EventDispatcher usw. Also wie gesagt, meistens geht es so, aber ich glaube irgendwas ist da nicth ganz korrekt.
Code:
//Konstruktor
public LoadApplication() {
progresstask = new Thread()
        {
            
          public void run()
          {    
            counter = 0;
            while (!notFinished)
            {             
              try
              {
                Thread.sleep(50);
              }
              catch (Exception e) {e.printStackTrace();}
              
              cardlayout.show(getFrame().getSouthPanel(),"0");
              getProgressBar().setString("Building Application..."); 
              getProgressBar().setStringPainted(true);
              getProgressBar().setBorderPainted(false);
              getProgressBar().setValue(counter);              
              counter++;               
            } 
            
            if(treeReady)
            {
              getProgressBar().setString("Application");
              getProgressBar().setStringPainted(true);            
              cardlayout.show(getFrame().getSouthPanel(),"1");
              cardlayout.removeLayoutComponent(getProgressBar());
            }                              
           }           
          };          
      applicationloadertask = new Thread()
      {
           public void run() 
           {
               notFinished = false;
               try 
               {     
                   initConnection();
		   buildComponents();
		   initApplication();                   
               }
               catch (Exception e){}
               isFnished = true;
           }        
         };   
         
         progresstask.start();
         applicationloadertask.start();
}
 
filmhund hat gesagt.:
ProgressBarProblem.

hi,

ich bin auch gerade dabei mich mit diesem problem auseinanderzusetzen. wenn du runable code posten würdest, dann könnt ich das ganze ja mal debuggen - kann dir zwar nichts versprechen, da ich mich mit threads noch ziemlich wenig auskenn - möchte das aber gern irgenwie hinbekommen...

lg
 
Was meinst du mit Runnable Code, mehr Runnable habe ich nicht 😉
Es sind nur diese 2 direkt überschriebenen Threads, sonst wird nirgends irgendwo was mit Threads oder Runnable gemacht :-/ ?
 
filmhund hat gesagt.:
Was meinst du mit Runnable Code, mehr Runnable habe ich nicht 😉
Es sind nur diese 2 direkt überschriebenen Threads, sonst wird nirgends irgendwo was mit Threads oder Runnable gemacht :-/ ?

naja ich mein das ich den code ins eclipse copier und dann ausführen kann
 
hallo, ich habe den fehler gefunden. man sollte eben immer darauf achten wann und wo man welche objekte vor oder nach anderen erzeugt.
in meinem fall wurde zuerst der tree und dann die progressbar erzeugt, dass hat beim versuch bei
progressbar.setValue(counter) gelegentlich zum Null Pointer Fetzer geführt.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben