คำถามสัมภาษณ์แบบคลาสสิก: สองเธรดตามลำดับพิมพ์ AB ตามลำดับซึ่งกระทู้พิมพ์ A, Thread B พิมพ์ B พิมพ์ 10 ครั้งแต่ละครั้งเพื่อให้เอฟเฟกต์ของ Abababa ...
แพ็คเกจ com.shangshe.path; Threadab คลาสสาธารณะ { / ** * @param args * / โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ธุรกิจพิมพ์สุดท้าย = ใหม่พิมพ์ (); เธรดใหม่ (ใหม่ runnable () {public void run () {สำหรับ (int i = 0; i <10; i ++) {business.print_a ();}}}}) เริ่มต้น (); เธรดใหม่ (ใหม่ runnable () {public void run () {สำหรับ (int i = 0; i <10; i ++) {business.print_b ();}}}}) เริ่มต้น (); }} คลาสการพิมพ์ {ธงบูลีนส่วนตัว = true; โมฆะที่ซิงโครไนซ์สาธารณะ print_a () {ในขณะที่ (! ธง) {ลอง {this.wait (); } catch (interruptedException e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); }} system.out.print ("a"); ธง = เท็จ; this.notify (); } public synchronized void print_b () {ในขณะที่ (ธง) {ลอง {this.wait (); } catch (interruptedException e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); }} system.out.print ("B"); ธง = จริง; this.notify (); -จากตัวอย่างข้างต้นเราสามารถออกแบบโปรแกรมที่มี 3 เธรดหรือแม้กระทั่ง N เธรด ตัวอย่างที่ให้ไว้ด้านล่างคือ 3 เธรดตามลำดับ A, B และ C ถูกพิมพ์ 10 ครั้งเพื่อให้เอฟเฟกต์ของ ABCABC ..
คลาสสาธารณะ Threadabc { / ** * @param args * / โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ธุรกิจพิมพ์สุดท้าย = ใหม่พิมพ์ (); เธรดใหม่ (ใหม่ runnable () {public void run () {สำหรับ (int i = 0; i <100; i ++) {business.print_a ();}}}) เริ่มต้น (); เธรดใหม่ (ใหม่ runnable () {public void run () {สำหรับ (int i = 0; i <100; i ++) {business.print_b ();}}}) เริ่มต้น (); เธรดใหม่ (ใหม่ runnable () {public void run () {สำหรับ (int i = 0; i <100; i ++) {business.print_c ();}}}) เริ่มต้น (); }} คลาสการพิมพ์ {บูลีนส่วนตัวควร _a = true; บูลีนส่วนตัวควร _b = false; บูลีนส่วนตัวควร _c = false; โมฆะที่ซิงโครไนซ์สาธารณะ print_a () {ในขณะที่ (ควร _b || ควร _c) {ลอง {this.wait (); } catch (interruptedException e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); }} system.out.print ("a"); ควร _a = false; ควร _b = true; ควร _c = false; this.notifyall (); } โมฆะที่ซิงโครไนซ์สาธารณะ print_b () {ในขณะที่ (ควร _a || ควร _c) {ลอง {this.wait (); } catch (interruptedException e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); }} system.out.print ("B"); ควร _a = false; ควร _b = false; ควร _c = true; this.notifyall (); } public synchronized void print_c () {ในขณะที่ (ควร _a || ควร _b) {ลอง {this.wait (); } catch (interruptedException e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); }} system.out.print ("C"); ควร _a = true; ควร _b = false; ควร _c = false; this.notifyall (); -อีกครั้งความสำคัญของวิศวกรรมซอฟต์แวร์ได้รับการพิสูจน์แล้ว ในโปรแกรมแบบมัลติเธรดควรกล่าวว่าในโปรแกรมเราควรใส่รหัสตรรกะทางธุรกิจลงในคลาสเดียวกันเพื่อให้มีการเชื่อมโยงกันอย่างมากและมีเพศสัมพันธ์ต่ำ