Mam następujący program w tym samym pliku. Zsynchronizowałem metodę run().Dlaczego metoda zsynchronizowana umożliwia jednoczesne uruchamianie wielu wątków?
class MyThread2 implements Runnable {
Thread t;
MyThread2(String s) {
t=new Thread(this,s);
t.start();
}
public synchronized void run() {
for (int i=0;i<3;i++) {
System.out.println("Thread name : "+ Thread.currentThread).getName());
try {
t.sleep(1000);
}
catch (InterruptedException e) {
e.getMessage();
}
}
}
}
class TestSync {
public static void main(String[] args) {
MyThread2 m1=new MyThread2("My Thread 1");
c.fun();
}
}
class c {
static void fun() {
MyThread2 m1=new MyThread2("My Thread 4");
}
}
wyjście jest
Thread name : My Thread 1
Thread name : My Thread 4
Thread name : My Thread 4
Thread name : My Thread 1
Thread name : My Thread 1
Thread name : My Thread 4
Moje pytanie jest dlaczego jest zsynchronizowany sposób umożliwiający zarówno "Mój wątek 1" i "My wątku 4" dostęp wątku współbieżnie?
Kod pan pisał ma co najmniej jedną składnię błąd i jest naprawdę trudny do odczytania. Upewnij się, że publikujesz aktualny kod i spróbuj sformatować go w czytelny sposób. – Mat
Błędne jest to, że blokujesz metodę, zamiast tego masz metodę, która blokuje instancję. –