ให้เราดูตัวอย่างเพื่อทำความเข้าใจแนวคิดของข้อผิดพลาดการรบกวนของเธรด -
ตัวอย่าง
import java.io.*; class Demo_instance{ static int val_1 = 6; void increment_val(){ for(int j=1;j<11;j++){ val_1 = val_1 + 1; System.out.println("The value of i after incrementing it is "+val_1); } } void decrement_val(){ for(int j=1;j<11;j++){ val_1 = val_1 - 1; System.out.println("The value of i after decrementing it is "+val_1); } } } public class Demo{ public static void main(String[] args){ System.out.println("Instance of Demo_instance created"); System.out.println("Thread instance created"); final Demo_instance my_inst = new Demo_instance(); Thread my_thread_1 = new Thread(){ @Override public void run(){ my_inst.increment_val(); } }; Thread my_thread_2 = new Thread(){ @Override public void run(){ my_inst.decrement_val(); } }; my_thread_1.start(); my_thread_2.start(); } }
ผลลัพธ์
Instance of Demo_instance created Thread instance created The value of i after incrementing it is 7 The value of i after incrementing it is 7 The value of i after decrementing it is 6 The value of i after incrementing it is 8 The value of i after decrementing it is 7 The value of i after incrementing it is 8 The value of i after incrementing it is 8 The value of i after decrementing it is 7 The value of i after incrementing it is 9 The value of i after decrementing it is 8 The value of i after decrementing it is 7 The value of i after decrementing it is 6 The value of i after decrementing it is 5 The value of i after decrementing it is 4 The value of i after decrementing it is 3 The value of i after decrementing it is 2 The value of i after incrementing it is 3 The value of i after incrementing it is 4 The value of i after incrementing it is 5 The value of i after incrementing it is 6
คลาสที่ชื่อ 'Demo_instance' กำหนดค่าคงที่ และฟังก์ชัน void 'increment_val' จะวนซ้ำชุดตัวเลข และเพิ่มค่าและแสดงบนคอนโซล ฟังก์ชันอื่นที่ชื่อว่า "decrement_val" จะวนซ้ำชุดตัวเลขและลดลงทุกครั้งและแสดงผลลัพธ์บนคอนโซล
คลาสชื่อ Demo มีฟังก์ชันหลักที่สร้างอินสแตนซ์ของคลาส และสร้างเธรดใหม่ เธรดนี้ถูกแทนที่ และมีการเรียกใช้ฟังก์ชันการทำงานบนอินสแตนซ์อ็อบเจ็กต์นี้ ทำสิ่งเดียวกันสำหรับเธรดที่สองด้วย เธรดทั้งสองนี้จะถูกเรียกด้วยฟังก์ชัน 'start'