Java bład scanner-a

0

Witam serdecznie,

Niebawem zbliża mi się kolokwium z Javy i chciałbym się trochę poduczyć jednak zadania przesłane przez mojego wykładowce nie do końca mi działają.

oto przykładowy program :

import java.util.Scanner;
public class Zad1 extends Thread {
public int a = 1;
Zad1(int a) {
this.a = a;
}
public void run() {
work();
}
synchronized void work() {
try {
sleep(2000);
} catch (InterruptedException e) {}
++a;
}
synchronized void mux() {
a *= 2;
}
public static void main(String []args) throws InterruptedException {
Scanner s = new Scanner(System.in);
Zad1 w = new Zad1(s.nextInt());
w.start();
sleep(1000);
w.mux();
w.join();
System.out.println(w.a);
}
} 

Czy ktoś może mi powiedzieć co jest nie tak

PS: a = 1 dodałem sam.

0

W tym zadaniu trzeba wiedzieć o jednej rzeczy - sleep() nie zwalnia monitorów (wątek nie wyjdzie z bloku synchronized). Dlatego jest dużo większa szansa, że najpierw wykona się "++a", niż "a *= 2;".

Jeżeli np. podamy na wejściu 3, to wynikiem prawie na pewno będzie (3 + 1) * 2.
Teoretycznie mogłoby się jednak zdarzyć, że wątek "w" zaraz po utworzeniu nie będzie mieć przydzielonego procesora i w wątku głównym "sleep(1000); w.mux();" wykona się wcześniej. Wtedy wynikiem byłoby (3 * 2) + 1.

1 użytkowników online, w tym zalogowanych: 0, gości: 1