Avatar billede kernelx Juniormester
09. januar 2008 - 19:26 Der er 6 kommentarer og
1 løsning

problemer med Thread

Hi,

jeg vil gerne have to Threads som starter på samme tid.
meget vigtigt er, at der er informationer, som jeg gerne vil give videre til en Thread (konstructor!?!?).

Følgende program vil jeg have til at vise en lignene output som det her:
Thread1: 0
Thread1: 1
Thread2: 0
Thread1: 2
Thread2: 1
...

Men det, som det nedenstående program skriver er:
Thread1: 0
Thread1: 1
Thread1: 2
Thread1: 3
Thread1: 4
Thread1: 5
Thread1: 6
Thread1: 7
Thread1: 8
Thread1: 9
Thread2: 0
Thread2: 1
Thread2: 2
Thread2: 3
Thread2: 4
Thread2: 5
Thread2: 6
Thread2: 7
Thread2: 8
Thread2: 9

Så i mit eksempel ser det ikke ud til, at der er noget som bliver lavet på samme tid.

Er der nogen som kan hjælpe mig med det?

Test.java
---
package testing.test;

public class Test extends Thread {
    public static void main (String[] args) {
        try {
            new Test("Thread1");
            new Test("Thread2");
        } catch (Exception e) {
           
        }
    }

    @Override public void run() {

    }

    public Test (String extra) {
        start();
        this.output(extra);
    }
   
    public void output (String extra) {
        try {
            for (int i=0; i<10; i++) {
                System.out.println(extra + ": " + i);
                Thread.sleep(500);
            }
        } catch (Exception e) {
           
        }
    }
}
Avatar billede arne_v Ekspert
09. januar 2008 - 19:30 #1
flyt kaldet af output op i run !
Avatar billede arne_v Ekspert
09. januar 2008 - 19:31 #2
(det er run som bliver koert i en separat traad)
Avatar billede kernelx Juniormester
09. januar 2008 - 23:19 #3
hvordan kan jeg få  'String extra' med ind i kaldet?
jeg ved i forvejen ikke hvad inholdet af 'extra' er.
det får jeg først at vide, når jeg skal til at starte en ny Thread.
Avatar billede arne_v Ekspert
10. januar 2008 - 00:34 #4
Den skal enten over i constructor eller over via en setter som kaldes inden start.
Avatar billede kernelx Juniormester
10. januar 2008 - 10:10 #5
Følgende virker.
Mange tak!

...

package testing.test;

public class Test extends Thread {
   
    private String extra = null;
   
    public static void main (String[] args) {
        try {
            new Test("Thread1");
            new Test("Thread2");
        } catch (Exception e) {
           
        }
    }

    @Override public void run() {
        this.output(this.extra);
    }

    public Test (String extra) {
        this.extra = extra;
        start();
    }
   
    public void output (String extra) {
        try {
            for (int i=0; i<10; i++) {
                System.out.println(extra + ": " + i);
                Thread.sleep(500);
            }
        } catch (Exception e) {
           
        }
    }
}
Avatar billede kernelx Juniormester
10. januar 2008 - 10:10 #6
Husk at skrive svar
Avatar billede arne_v Ekspert
10. januar 2008 - 15:11 #7
kommer her
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester