เราจะแนะนำเนื้อหาของพูลเธรดในภายหลัง เนื้อหาของบทนี้รวมถึง:
บทนำเกี่ยวกับเธรดและ Runnable
ความเหมือนและความแตกต่างระหว่างเธรดและรันได้
ตัวอย่างของมัลติเธรดสำหรับเธรดและ runnable
บทนำเกี่ยวกับเธรดและ Runnable
Runnable เป็นอินเทอร์เฟซที่มีวิธีเดียว Run () คำจำกัดความของมันมีดังนี้:
การคัดลอกรหัสมีดังนี้:
อินเทอร์เฟซสาธารณะทำงานได้ {
นามธรรมนามธรรมสาธารณะ Run ();
-
บทบาทของ Runnable, ใช้หลายเธรด เราสามารถกำหนดคลาส A เพื่อใช้งานอินเตอร์เฟส Runnable;
เธรดเป็นคลาส เธรดเองใช้อินเทอร์เฟซที่รันได้ คำแถลงของมันมีดังนี้:
เธรดคลาสสาธารณะใช้งาน Runnable {}
บทบาทของเธรดคือการตระหนักถึงมัลติเธรด
ความเหมือนและความแตกต่างระหว่างเธรดและรันได้
ความคล้ายคลึงกันระหว่างเธรดและ Runnable: ทั้งคู่เป็น“ การใช้งานแบบมัลติเธรด”
ความแตกต่างระหว่างเธรดและ runnable:
เธรดเป็นคลาสและ Runnable เป็นอินเทอร์เฟซ; เรารู้ว่า "คลาสสามารถมีคลาสพาเรนต์เดียวเท่านั้น แต่สามารถใช้หลายอินเทอร์เฟซ" ดังนั้น Runnable จึงมีความสามารถในการปรับขนาดได้ดีขึ้น
นอกจากนี้ยังสามารถใช้งานได้สำหรับ "การแบ่งปันทรัพยากร" นั่นคือหลายเธรดถูกสร้างขึ้นตามวัตถุที่รันได้บางอย่างและพวกเขาจะแบ่งปันทรัพยากรบนวัตถุที่รันได้
โดยทั่วไปขอแนะนำให้ใช้มัลติเธรดผ่าน "runnable"!
ตัวอย่างมัลติเธรดสำหรับเธรดและรันได้
1. ตัวอย่างมัลติเธรดของเธรด
ด้านล่างเราสามารถเข้าใจเธรดและรันได้ดีขึ้นผ่านตัวอย่างและวาดตัวอย่างออนไลน์ที่น่าเชื่อถือมากขึ้น
การคัดลอกรหัสมีดังนี้:
// threadtest.java ซอร์ส
คลาส MyThread ขยายเธรด {
ตั๋ว INT ส่วนตัว = 10;
โมฆะสาธารณะเรียกใช้ () {
สำหรับ (int i = 0; i <20; i ++) {
if (this.ticket> 0) {
System.out.println (this.getName ()+"ขายตั๋ว: ตั๋ว"+this.ticket--);
-
-
-
-
ชั้นเรียนสาธารณะ Threadtest {
โมฆะคงที่สาธารณะหลัก (สตริง [] args) {
// เริ่มต้น 3 เธรด T1, T2, T3;
MYTHREAD T1 = ใหม่ MYTHREAD ();
MYTHREAD T2 = ใหม่ MYTHREAD ();
MYTHREAD T3 = ใหม่ MYTHREAD ();
t1.start ();
t2.start ();
t3.start ();
-
-
ผลการทำงาน:
การคัดลอกรหัสมีดังนี้:
การขายตั๋ว Thread-0: Ticket10
การขายตั๋ว Thread-1: ตั๋ว 10
การขายตั๋ว Thread-2: ตั๋ว 10
การขายตั๋ว Thread-1: Ticket9
การขายตั๋ว Thread-0: Ticket9
การขายตั๋ว Thread-1: Ticket8
การขายตั๋ว Thread-2: Ticket9
การขายตั๋ว Thread-1: Ticket7
การขายตั๋ว Thread-0: Ticket8
การขายตั๋ว Thread-1: Ticket6
การขายตั๋ว Thread-2: Ticket8
การขายตั๋ว Thread-1: Ticket5
การขายตั๋ว Thread-0: Ticket7
ตั๋ว Thread-1: ตั๋ว 4
การขายตั๋ว Thread-2: Ticket7
การขายตั๋ว Thread-1: ตั๋ว 3
การขายตั๋ว Thread-0: Ticket6
การขายตั๋ว Thread-1: ตั๋ว 2
การขายตั๋ว Thread-2: Ticket6
ผลลัพธ์คำอธิบาย:
(01) MyThread สืบทอดมาจากเธรดซึ่งเป็นเธรดที่กำหนดเอง แต่ละตำนานขายตั๋ว 10 ใบ
(02) เธรดหลักจะสร้างและเริ่มต้น 3 เธรดเด็ก MyThread กระทู้เด็กแต่ละคนขายตั๋ว 10 ใบ
2. ตัวอย่างมัลติเธรดของ runnable
ต่อไปเราแก้ไขโปรแกรมข้างต้น ใช้อินเทอร์เฟซผ่าน Runnable ซึ่งจะใช้การทำมัลติเธรด
การคัดลอกรหัสมีดังนี้:
// runnableTest.java ซอร์ส
คลาส MyThread ใช้งาน Runnable {
ตั๋ว INT ส่วนตัว = 10;
โมฆะสาธารณะเรียกใช้ () {
สำหรับ (int i = 0; i <20; i ++) {
if (this.ticket> 0) {
System.out.println (thread.currentthread (). getName ()+"ขายตั๋ว: ตั๋ว"+this.ticket--);
-
-
-
-
ชั้นเรียนสาธารณะ runnableTest {
โมฆะคงที่สาธารณะหลัก (สตริง [] args) {
MYTHREAD MT = ใหม่ MYTHREAD ();
// เริ่มต้น 3 เธรด T1, T2, T3 (พวกเขาแบ่งปันวัตถุที่รันได้) และ 3 เธรดเหล่านี้ขายตั๋วทั้งหมด 10 ใบ!
เธรด t1 = เธรดใหม่ (mt);
เธรด t2 = เธรดใหม่ (mt);
เธรด t3 = เธรดใหม่ (mt);
t1.start ();
t2.start ();
t3.start ();
-
-
ผลการทำงาน:
การคัดลอกรหัสมีดังนี้:
การขายตั๋ว Thread-0: Ticket10
การขายตั๋ว Thread-2: Ticket8
การขายตั๋ว Thread-1: Ticket9
การขายตั๋ว Thread-2: Ticket6
การขายตั๋ว Thread-0: Ticket7
ตั๋ว Thread-2: ตั๋ว 4
การขายตั๋ว Thread-1: Ticket5
ตั๋ว Thread-2: ตั๋ว 2
การขายตั๋ว Thread-0: ตั๋ว 3
ตั๋ว Thread-1: ตั๋ว 1
ผลลัพธ์คำอธิบาย:
(01) ซึ่งแตกต่างจาก "Mythread สืบทอดมาจากเธรด" ข้างต้น;
(02) เธรดหลักจะสร้างและเริ่มเธรดเด็ก 3 เธรดและเธรดลูกทั้ง 3 นี้ทั้งหมดถูกสร้างขึ้นตาม "MT, Object Runnable" ผลของการดำเนินการคือเธรดเด็ก 3 ตัวนี้ขายตั๋วทั้งหมด 10 ใบ ซึ่งหมายความว่าพวกเขาแบ่งปันอินเทอร์เฟซ MyThread