Hirdetés

Keresés

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

  • loszerafin
    senior tag

    Köszönöm, valóban jó megoldás egy lock objektum létrehozása:


    class Counter3 {
    static int cnt = 0;
    static boolean end = false;
    static Object lock = new Object();

    static class ModCounter implements Runnable {
    public void run() {
    while(!end){
    synchronized (lock) {
    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++){
    Thread.sleep(500);
    synchronized (lock) {
    System.out.println(cnt);
    };
    };
    end = true;

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



    Még annyit hozzáteszek azok kedvéért, akik később olvassák ezt a topicot:

    Azt hiszem nem szerencsés egy több szálon futó programban olyan ciklust futtatni, amiben nincs Thread.sleep(), mert így nem hagyunk időt másik szálaknak a bekapcsolódásra, ráadásul zabálja a processzort, szóval
    valami ilyesmi jobb, mint ami a fenti kódjaimban látható:


    while(!end){
    synchronized (lock) {
    cnt += 1;
    cnt -= 1;
    };
    try {
    Thread.sleep(10);
    } catch (InterruptedException e) {}
    }


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