28. juli 2008 - 17:22Der er
7 kommentarer og 1 løsning
Oprettelse af tråde som skal køre og notificere
Hejsa eksperter,
Jeg har lidt problemer med en en applikation jeg har lavet med et trådpar jeg har oprettet. Den består af 3 klasser hvor Kontroller sætter trådklasser (arbejder og oprydder) igang, arbejder skal bare tælle til 10 og når den er færdig skal den notificere oprydder som bare sender en system.out. Kan godt være der er en del fejl.
public static void main(String args[]) { Arbejder arbejder = new Arbejder(); new Thread(arbejder).start(); Oprydder oprydder = new Oprydder(); new Thread(oprydder).start(); } }
public class Arbejder implements Runnable {
Oprydder oprydder;
public synchronized void run() {
try {
for(int i=0; i<11; i++){ System.out.println("Nu har jeg lavet "+i+" af 10"); } notifyAll(); wait();
} catch (InterruptedException e) {} } }
public class Oprydder implements Runnable{
public synchronized void run() {
try { wait(); System.out.println("Oprydning i gang"); Thread.sleep(2000);
public class Kontroller { public static void main(String args[]) throws InterruptedException { Arbejder arbejder = new Arbejder(); Thread t1 = new Thread(arbejder); t1.start(); Oprydder oprydder = new Oprydder(t1); Thread t2 = new Thread(oprydder); t2.start(); t2.join(); } }
class Arbejder implements Runnable { public void run() { try { for(int i = 0; i < 11; i++){ System.out.println("Nu har jeg lavet "+i+" af 10"); Thread.sleep(1000); } } catch (InterruptedException e) { // ignore } } }
class Oprydder implements Runnable { private Thread t; public Oprydder(Thread t) { this.t = t; } public synchronized void run() { try { t.join(); System.out.println("Oprydning i gang"); } catch (InterruptedException e) { // ignore } } }
Hvis du fjerner join'en nede i Oprydder saa vil Oprydder koere foer Arbejde er faerdig - ihvertfald hvis du som mig venter lidt i Arbejder - hvis man som i din oprindelige kode bare udskriver 10 gange, saa kan Arbejder naa at vaere faerdig inden Oprydder koerer.
Join'en i main er noedvendig hvis du foerst vil lave noget i main naar Oprydder er faerdig eller hvis du aendrer traadenes type.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.