ใช่ เราสามารถซิงโครไนซ์เมธอด run() ใน Java ได้ แต่ไม่จำเป็นเพราะวิธีนี้ใช้เธรดเดียวเท่านั้น ดังนั้น การซิงโครไนซ์ ไม่จำเป็นสำหรับ run() กระบวนการ. แนวปฏิบัติที่ดีในการซิงโครไนซ์ วิธีการที่ไม่คงที่ ของคลาสอื่นเพราะถูกเรียกใช้โดยหลายเธรดพร้อมกัน
ตัวอย่าง
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();
}
} ผลลัพธ์
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