เธรด: แต่ละงานเรียกว่าเธรด เธรดไม่สามารถอยู่ได้อย่างอิสระมันจะต้องเป็นส่วนหนึ่งของกระบวนการ
เธรดเดี่ยว: แอปพลิเคชัน Java ทั่วไปเป็นเธรดเดี่ยว ตัวอย่างเช่นเมื่อเรียกใช้โปรแกรม HelloWorld กระบวนการ JVM จะเริ่มต้นขึ้นและจากนั้นวิธีหลักจะเรียกใช้เพื่อสร้างเธรด วิธีหลักเรียกอีกอย่างว่าเธรดหลัก
มัลติเธรด: โปรแกรมที่รันมากกว่าหนึ่งเธรดในเวลาเดียวกันเรียกว่าโปรแกรมมัลติเธรด มัลติเธรดสามารถตอบสนองวัตถุประสงค์ของโปรแกรมเมอร์เพื่อเขียนโปรแกรมที่มีประสิทธิภาพเพื่อให้บรรลุเป้าหมายในการใช้งาน CPU อย่างเต็มที่
ตัวอย่างรหัสแบบเธรดเดี่ยว:
คลาสสาธารณะ singlethread {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {เธรดเธรด = thread.currentthread (); // รับเธรดเธรดที่รันอยู่ในปัจจุบัน setName ("เธรดเดี่ยว"); // เปลี่ยนชื่อ thread.out.println (thread.getName ()+"รัน"); สำหรับ (int i = 0; i <10; i ++) {system.out.println ("เธรดกำลังนอนหลับ:"+i); ลอง {thread.sleep (1000); // เธรดกำลังนอนหลับล่าช้าโดยหนึ่งวินาที} catch (interruptedException e) {// todo catch blocke.printstacktrace (); System.out.println ("ข้อผิดพลาดเธรด");}}}}}}}}}}}}}}}}}}ตัวอย่างรหัสแบบมัลติเธรด:
หมายเหตุ: มีสองวิธีในการใช้ multithreading หนึ่งคือการสืบทอดคลาสเธรดและอีกวิธีหนึ่งคือการใช้อินเตอร์เฟสที่ทำงานได้
การสืบทอดคลาสเธรดเพื่อใช้มัลติเธรด
Public Class TestThread {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {เธรด t1 = ใหม่ ExtionThread ("T1", 1,000); // สร้างเธรดโดยใช้วัตถุขึ้นเทิร์นและสร้างชื่อเธรดและเธรดเวลาด้ายเวลาด้าย t2 = new ExtionThread ("T2", 2000); เธรด t3 = ใหม่ ExtionThread ("T3", 3000); t1.start (); // เริ่มเธรดและเรียกใช้วิธีการเรียกใช้ t2.start (); t3.start ();}} คลาส ExtionThread ขยายเธรด {// มรดกชื่อสตริงคลาสของเธรด; เวลา int; public ExtionThread (ชื่อสตริง, เวลา int) {// สร้างชื่อเธรดและเวลาการนอนหลับ this.name = name; this.time = time;} โมฆะสาธารณะ run () {// เขียนวิธีการเรียกใช้ของคลาสเธรดลอง {sleep (เวลา); // เธรดทั้งหมดเพิ่ม Sleep} catch (interruptedExceptione) {E.printStackTrace (); system.out.println ("ข้อยกเว้นอินเตอร์รัปต์เธรด");} system.out.println ("ชื่อคือ:"+ชื่อ+" -มัลติเธรดเพื่อใช้งานอินเตอร์เฟส Runnable
คลาสสาธารณะ runnableThread {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {runnable r1 = ใหม่ implunnable ("r1", 1,000); // อินเทอร์เฟซ Runnable ต้องพึ่งพาคลาสเธรดเพื่อสร้างเธรดเธรด t1 = เธรดใหม่ (R1); // runnable ไม่สามารถเรียกใช้วิธีการเริ่มต้น () เนื่องจากไม่ใช่เธรดดังนั้นคุณต้องใช้คลาสเธรดเพื่อเพิ่มเธรด Runnable R2 = ใหม่ที่เกิดขึ้นได้ ("R2", 2000); Thread T2 = ใหม่เธรด (R2); Runnable R3 = ใหม่ // เริ่มเธรดและเรียกใช้วิธีการเรียกใช้ t2.start (); t3.Start ();}} คลาส implrunnable onplunnable onnable {// การสืบทอดชื่อสตริงอินเตอร์เฟสที่เรียกใช้ ลอง {thread.sleep (เวลา); // เธรดทั้งหมดเพิ่ม sleep} catch (interruptedException e) {e.printStackTrace (); system.out.println ("เธรดอินเตอร์รัปต์ข้อยกเว้น");} system.out.println ("ชื่อคือ:"+ชื่อ+"หมายเหตุ: คลาสเธรดเป็นคลาสที่ใช้อินเทอร์เฟซที่เรียกใช้งานได้
ข้อดีของการใช้อินเทอร์เฟซที่รันได้มากกว่าการสืบทอดคลาสเธรด