สามวิธีในการใช้มัลติเธรดใน Java
ใน Java มีสามวิธีในการใช้มัลติเธรด วิธีแรก: สืบทอดคลาสเธรดและแทนที่ฟังก์ชั่นการเรียกใช้ วิธีที่สอง: ใช้อินเตอร์เฟส Runnable และเขียนฟังก์ชั่นการเรียกใช้ใหม่ วิธีที่สาม: ใช้อินเทอร์เฟซที่เรียกได้และแทนที่ฟังก์ชันการโทร บทความนี้จะอธิบายว่าวิธีการทั้งสามนี้สามารถนำไปใช้กับตัวอย่างได้อย่างไร หากคุณต้องการโปรดดูที่มัน
(1) สืบทอดคลาสเธรดและแทนที่ฟังก์ชั่นการเรียกใช้
คลาส XX ขยายเธรด {โมฆะสาธารณะ Run () {thread.sleep (1000) // เธรดจะนอนเป็นเวลา 1,000 มิลลิวินาทีการนอนหลับทำให้เธรดเข้าสู่สถานะบล็อกและทรัพยากรที่วางจำหน่าย}}} เริ่มหัวข้อ:
Object.start () // เริ่มเธรดรันฟังก์ชันการเรียกใช้
(2) ใช้อินเทอร์เฟซ Runnable รหัสมีดังนี้
คลาส MyThread ใช้งาน Runnable {ชื่อสตริงส่วนตัว; Public Mythread (ชื่อสตริง) {super (); this.name = ชื่อ; } @Override โมฆะสาธารณะเรียกใช้ () {สำหรับ (int i = 0; i <200; i ++) {system.out.println ("เธรด"+ชื่อ+"--->"+i); }}} คลาสสาธารณะ ThreadDemo {โมฆะคงที่สาธารณะหลัก (String [] args) {MyThread a = new MyThread ("A"); MYTHREAD B = New MyThread ("B"); MYTHREAD C = New MyThread ("C"); เธรดใหม่ (a). start (); เธรดใหม่ (b). start (); เธรดใหม่ (c). start (); -(3) ใช้อินเทอร์เฟซที่เรียกได้และเขียนฟังก์ชันการโทรใหม่
Callable เป็นอินเทอร์เฟซที่คล้ายกับ Runnable คลาสที่ใช้อินเทอร์เฟซ callable และคลาสที่ใช้งาน Runnable เป็นงานที่สามารถดำเนินการโดยเธรดอื่น ๆ
มีความแตกต่างกันหลายประการระหว่างการเรียกและเรียกใช้:
Java Callable Code ตัวอย่าง:
Class TaskWithResult ใช้ callable <string> {ID INT ส่วนตัว; สาธารณะ TaskWithResult (int id) {this.id = id; } @Override การเรียกสตริงสาธารณะ () โยนข้อยกเว้น {return "ผลลัพธ์ของ taskWithResult" + id; }} คลาสสาธารณะ callableTest {โมฆะสาธารณะคงที่หลัก (สตริง [] args) พ่น InterruptedException, ExecutionException {ExecutorService Exec = Executors.NewCachedThreadPool (); arrayList <อนาคต <สตริง >> ผลลัพธ์ = new ArrayList <Future <String> (); // อนาคตเทียบเท่ากับคอนเทนเนอร์ที่ใช้ในการจัดเก็บผลลัพธ์ของการดำเนินการของผู้ดำเนินการสำหรับ (int i = 0; i <10; i ++) {results.add (exec.submit (TaskWithResult (i))); } สำหรับ (อนาคต <String> fs: ผลลัพธ์) {ถ้า (fs.isdone ()) {system.out.println (fs.get ()); } else {system.out.println ("ผลลัพธ์ในอนาคตยังไม่สมบูรณ์"); }} exec.shutdown (); -ขอบคุณสำหรับการอ่านฉันหวังว่ามันจะช่วยคุณได้ ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!