ใช้มัลติเธรดโดยสืบทอดคลาส Thead:
ข้อดี: เขียนง่าย หากคุณต้องการเข้าถึงเธรดปัจจุบัน เพียงใช้สิ่งนี้แทนการใช้เมธอด Thead.currentThread()
ข้อเสีย: เนื่องจากคลาสเธรดนี้สืบทอดคลาส Thead จึงไม่สามารถสืบทอดคลาสอื่นได้
รหัสตัวอย่าง:
คัดลอกรหัสรหัสดังต่อไปนี้:
แพ็คเกจ org.frzh.thread;
FirstThread คลาสสาธารณะขยายเธรด {
ส่วนตัวฉัน;
//เขียนวิธีการเรียกใช้ใหม่ เนื้อความของวิธีการของวิธีการเรียกใช้คือเนื้อความการดำเนินการของเธรด
โมฆะสาธารณะวิ่ง () {
สำหรับ (; ฉัน < 100; i++) {
//เมื่อคลาสเธรดสืบทอดคลาสเธรด คุณสามารถเรียกใช้เมธอด getName ได้โดยตรงเพื่อรับชื่อเธรดปัจจุบัน
//หากคุณต้องการรับเธรดปัจจุบัน ให้ใช้สิ่งนี้โดยตรง
//วิธีการgetNameของวัตถุเธรดส่งกลับชื่อของเธรดปัจจุบัน
System.out.println(getName() + " " + i);
-
-
โมฆะคงที่สาธารณะ main (String [] args) {
สำหรับ (int i = 0; i < 100; i++) {
//เรียกเมธอด currentThread ของ Thead เพื่อรับเธรดปัจจุบัน
System.out.println(Thread.currentThread().getName() + " " +i);
ถ้า (ฉัน == 20) {
ใหม่ FirstThread().start();
ใหม่ FirstThread().start();
-
-
-
-
ตัวอย่างผลลัพธ์การทำงาน:
เราพบว่าค่าของ i ในสองเธรดย่อยนั้นไม่ต่อเนื่องกัน ซึ่งดูเหมือนไม่สอดคล้องกับสิ่งที่เราพูดเกี่ยวกับการแบ่งปันข้อมูลโดยตรงโดยเธรดย่อย อันที่จริง ที่นี่เราสร้างอินสแตนซ์สองเธรดย่อย โดยแต่ละเธรดมีตัวแปรอินสแตนซ์ i ของตัวเอง
การใช้มัลติเธรดที่ใช้อินเทอร์เฟซ Runable:
ข้อดี: คลาสเธรดใช้อินเทอร์เฟซ Runable เท่านั้น ดังนั้นจึงสามารถสืบทอดคลาสอื่นได้เช่นกัน
ในกรณีนี้ หลายเธรดสามารถแชร์ออบเจ็กต์เป้าหมายได้ ดังนั้นจึงเหมาะสมมากสำหรับหลายเธรดในการประมวลผลทรัพยากรเดียวกัน เพื่อให้สามารถแยก CPU โค้ด และข้อมูลเพื่อสร้างแบบจำลองที่ชัดเจนและการคิดเชิงวัตถุที่ดีขึ้น .
ข้อเสีย: การเขียนโปรแกรมมีความซับซ้อนเล็กน้อย หากคุณต้องการเข้าถึงเธรดปัจจุบัน คุณต้องใช้เมธอด Thread.currentThread
รหัสตัวอย่าง:
คัดลอกรหัสรหัสดังต่อไปนี้:
แพ็คเกจ org.frzh.thread;
คลาสสาธารณะ SecondThread ใช้งาน Runnable {
ส่วนตัวฉัน;
@แทนที่
โมฆะสาธารณะวิ่ง () {
// TODO ต้นขั้ววิธีการสร้างอัตโนมัติ
สำหรับ (; ฉัน < 100; i++) {
System.out.println(Thread.currentThread().getName() + " " + i);
-
-
โมฆะคงที่สาธารณะ main (String [] args) {
สำหรับ (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName() + " " + i);
ถ้า (ฉัน == 20) {
SecondThread st = ใหม่ SecondThread();
เธรดใหม่ (st, "เธรดย่อย 1"). เริ่มต้น ();
เธรดใหม่ (st, "เธรดย่อย 2"). เริ่มต้น ();
-
-
-
-
ตัวอย่างผลลัพธ์การทำงาน:
จะเห็นได้ว่าค่า i ในขณะนี้เปลี่ยนแปลงอย่างต่อเนื่องเนื่องจากเธรด 1 และ 2 มีเป้าหมายเดียวกัน