Új hozzászólás Aktív témák

  • loszerafin

    senior tag

    Próbálkozom a thread-ekkel és elakadtam.

    a run() metódusom szinkronizált, egy ciklusban a cnt mezőhöz hozzáad egyet, majd ki is von.

    A main()-ben 500 msec-enként kiírom a cnt értékét. A kimenet hol 0, hol egy. Nyilván, a main() metódust futtató szál println-ja ''beüt'' a cnt-hez hozzáadó és abból kivonó utasítás közé. Hogy lehet ezt elkerülni?


    class Counter1 {
    static int cnt = 0;
    static boolean end = false;

    static class ModCounter implements Runnable {
    public synchronized void run() {
    while(!end){
    cnt += 1;
    cnt -= 1;
    }
    }
    }

    public static void main(String[] args)
    throws InterruptedException{
    ModCounter modc = new ModCounter();
    Thread t1 = new Thread(modc);

    t1.start();

    for(int i=0; i<10; i++){
    System.out.println(cnt);
    Thread.sleep(500);
    };
    end = true;

    t1.join();
    System.out.println(cnt);
    }
    }


    Kimenet:


    0
    1
    1
    0
    0
    1
    1
    1
    0
    1
    0


    Szeretném, ha csupa 0 jelenne meg.

    Próbáltam a kiírást szinkronizálni:


    synchronized (Counter1.class) {
    System.out.println(cnt);
    };


    De semmi változás.

    Előre is köszönöm
    KL

Új hozzászólás Aktív témák

Hirdetés