ฉันเพิ่งเห็นคำถามด้วยรหัสดังนี้:
การคัดลอกรหัสมีดังนี้:
โมฆะคงที่สาธารณะหลัก (String args []) {
เธรด t = เธรดใหม่ () {
โมฆะสาธารณะเรียกใช้ () {
pong ();
-
-
t.run ();
System.out.println ("ping");
-
pong void pong () {
System.out.println ("pong");
-
คำถามผลลัพธ์จะเป็นอย่างไร?
ฉันวิ่งไปหลายครั้งและมันก็กลายเป็นปิงปอง ต่อมาฉันค้นพบจุดสำคัญในที่สุดวัตถุเธรด t ซึ่งเรียกว่าวิธีการเริ่มต้น () แต่วิธีการเรียกใช้ () ต่อมาฉันเปิดการดีบักโหมดเบรกพอยต์และพบว่าเมื่อฉันเรียกวิธีการเรียกใช้ () มีเพียงเธรดเดียวในโปรแกรมทั้งหมด จากนั้นเราสามารถแข่งขันกับเธรดหลักสำหรับ CPU และอาจมีหลายผลลัพธ์ แต่เนื่องจากวิธีการส่งออกต่อไปนี้จะดำเนินการอย่างรวดเร็วจึงเป็นเอาต์พุตของ "ping pong"
ดังนั้นความแตกต่างระหว่าง Run () และ Start () คือ:
Run () เป็นวิธีการที่กำหนดไว้ในอินเตอร์เฟส Runnable ซึ่งคือการอนุญาตให้โปรแกรมเมอร์ไคลเอ็นต์เขียนรหัสการทำงานของตนเองในวิธีนี้ ไม่มีความแตกต่างระหว่างการโทรโดยตรงและเรียกวิธีการสมาชิกของคุณเองโดยคลาสทั่วไป
Start () เป็นธงที่เธรดเริ่มทำงาน
ดังนั้นฉันคิดว่าถ้าคุณต้องการเขียนเธรดแยกต่างหากก็เป็นการดีที่สุดที่จะสืบทอดเธรด .