Có, chúng ta có thể đồng bộ hóa phương thức run() trong Java, nhưng không cần thiết vì phương thức này được thực thi bởi một luồng (thread) duy nhất. Do đó đồng bộ hóa không cần cho phương thức run(). Thực tế tốt là đồng bộ hóa phương thức non-static của lớp khác vì nó có thể được gọi bởi nhiều luồng cùng lúc.
Ví dụ
public class SynchronizeRunMethodTest implements Runnable {
public synchronized void run() {
System.out.println(Thread.currentThread().getName() + " is starting");
for(int i = 0; i < 5; i++) {
try {
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName() + " is running");
} catch(InterruptedException ie) {
ie.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + " is finished");
}
public static void main(String[] args) {
SynchronizeRunMethodTest test = new SynchronizeRunMethodTest();
Thread t1 = new Thread(test);
Thread t2 = new Thread(test);
t1.start();
t2.start();
}
}
Kết quả
Thread-0 is starting Thread-0 is running Thread-0 is running Thread-0 is running Thread-0 is running Thread-0 is running Thread-0 is finished Thread-1 is starting Thread-1 is running Thread-1 is running Thread-1 is running Thread-1 is running Thread-1 is running Thread-1 is finished