1. การควบคุมเธรดเป็นเรื่องธรรมดามาก
2. เธรดมีห้ารัฐ: การสร้าง, การดำเนินงาน, การดำเนินการ, การปิดกั้นและความตาย
สร้าง: สร้างเธรดโดยใช้ตัวดำเนินการใหม่
Runable: หลังจากเริ่มเธรดโดยใช้วิธีการเริ่มต้นระบบจะจัดสรรทรัพยากร
สถานะการรัน: วิธีเรียกใช้วิธีการดำเนินการเธรด
การบล็อก: เธรดที่กำลังทำงานหยุดทำงานด้วยเหตุผลบางอย่าง
สถานะความตาย: เธรดจบลง
3. ปัญหาด้านความปลอดภัยของวิธีการดั้งเดิม
Thread's Stop (), Suspend (), Resume (), Destroy () และ Destroy () ไม่ได้ใช้อีกต่อไปเพราะไม่ปลอดภัยและอาจทำให้เกิดการหยุดชะงัก
4. วิธีการควบคุมการทำงานของเธรด
ตัวอย่างเช่นหากการถ่ายโอนไฟล์ใช้เวลา 10 วินาทีให้ถ่ายโอนไปยังช่วงเวลาหนึ่งแล้วดำเนินการต่อจนกว่าการถ่ายโอนจะเสร็จสมบูรณ์ ใช้วิธีการที่จะใช้งาน Runnable ก่อนอื่นคลาส Runnable สำหรับการถ่ายโอนไฟล์
รหัสมีดังนี้:
การคัดลอกรหัสมีดังนี้:
Public Class ThreadControltest1 ใช้งาน Runnable
-
ร้อยละ int ส่วนตัว = 0;
การเรียกใช้โมฆะสาธารณะ ()
-
ในขณะที่ (จริง)
-
System.out.println ("การถ่ายโอนความคืบหน้า:" + เปอร์เซ็นต์ + "%");
พยายาม
-
Thread.sleep (1,000);
-
จับ (Exception Ex)
-
เปอร์เซ็นต์ += 10;
ถ้า (เปอร์เซ็นต์ == 100)
-
System.out.println ("ถ่ายโอนเสร็จสมบูรณ์");
หยุดพัก;
-
-
-
โมฆะคงที่สาธารณะหลัก (สตริง [] args)
-
ThreadControltest1 ft = ใหม่ ThreadControlTest1 ();
เธรด th = เธรดใหม่ (ft);
Th.Start ();
-
-
5. เรียกใช้กระบวนการจำลองการถ่ายโอนไฟล์การถ่ายโอนบนคอนโซล จะเห็นได้ว่าหากวัตถุของคลาสนี้ทำงานเป็นเธรดในขณะที่ลูปจะถูกดำเนินการ 10 ครั้งแล้วออก
อย่างไรก็ตามคุณต้องหยุดการทำงานของเธรด (เช่น 1 นาที) ในช่วงเวลาหนึ่ง (เช่น 5 วินาทีในภายหลัง) แต่คุณไม่สามารถใช้ฟังก์ชั่นที่เกี่ยวข้องของเธรดได้
เพื่อแก้ปัญหานี้วิธีการทั่วไปมีดังนี้:
1. เมื่อจำเป็นต้องหยุดชั่วคราวเพียงแค่ให้วิธีการรันของเธรดสิ้นสุดลงเพื่อวิ่งไปยังทรัพยากรฟรี (อันที่จริงแล้วให้เธรดสิ้นสุดลงอย่างถาวร)
2. เมื่อเธรดจำเป็นต้องดำเนินการต่อไปเธรดใหม่จะเปิดขึ้นเพื่อทำงานต่อไป
จะทำให้วิธีการวิ่งสิ้นสุดลง?
6. รหัสด้านบนสามารถเปลี่ยนเป็นสิ่งต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
Public Class ThreadControltest1 ใช้งาน Runnable
-
ร้อยละ int ส่วนตัว = 0;
บูลีนส่วนตัว iSrun = true;
การเรียกใช้โมฆะสาธารณะ ()
-
ในขณะที่ (iSrun)
-
System.out.println ("การถ่ายโอนความคืบหน้า:" + เปอร์เซ็นต์ + "%");
พยายาม
-
Thread.sleep (1,000);
-
จับ (Exception Ex)
-
เปอร์เซ็นต์ += 10;
ถ้า (เปอร์เซ็นต์ == 100)
-
System.out.println ("ถ่ายโอนเสร็จสมบูรณ์");
หยุดพัก;
-
-
-
โมฆะคงที่สาธารณะหลัก (สตริง [] args)
-
ThreadControltest1 ft = ใหม่ ThreadControlTest1 ();
เธรด th = เธรดใหม่ (ft);
Th.Start ();
พยายาม
-
Thread.sleep (5000);
} catch (Exception Ex)
-
ft.isrun = false;
System.out.println ("หยุดชั่วคราวหนึ่งนาที");
พยายาม
-
Thread.sleep (1,000*60);
} catch (Exception Ex)
-
ft.isrun = true;
Th = เธรดใหม่ (ft);
Th.Start ();
-
-