ĐA LUỒNG (Multithreading) - trong lập trình hướng đối tượng
Chương ĐA LUỒNG (Multithreading) Mục tiêu: Sau kết thúc chương này, bạn có thể: Định nghĩa luồng (thread) Mô tả đa luồng Tạo quản lý luồng Hiểu vòng đời luồng Mô tả luồng hiểm (daemon thread) Giải thích thiết lập luồng ưu tiên Giải thích cần thiết đồng Hiểu cách áp dụng vào từ khoá đồng (how to apply synchronized keywords) Liệt kê điểm yếu đồng Giải thích vai trị phương thức wait() (đợi), notify() (thông báo) notifyAll() Mô tả điều kiện bế tắc (deadlock condition) 8.1 Giới thiệu Một luồng thuộc tính Java Nó đơn vị nhỏ đoạn mã thi hành mà thực công việc riêng biệt Ngôn ngữ Java máy ảo Java hai hệ thống đươc phân luồng 8.2 Đa luồng Java hổ trợ đa luồng, mà có khả làm việc với nhiều luồng Một ứng dụng bao hàm nhiều luồng Mỗi luồng đăng ký công việc riêng biệt, mà chúng thực thi đồng thời với luồng khác Đa luồng giữ thời gian nhàn rỗi hệ thống thành nhỏ Điều cho phép bạn viết chương trình có hiệu cao với tận dụng CPU tối đa Mỗi phần chương trình gọi luồng, luồng định nghĩa đường dẫn khác thực Đây thiết kế chuyên dùng đa nhiệm Trong đa nhiệm, nhiều chương chương trình chạy đồng thời, chương trình có luồng Một vi xử lý thực thi tất chương trình Cho dù xuất mà chương trình thực thi đồng thời, thực tế vi xử lý nhảy qua lại tiến trình 8.3 Tạo quản lý luồng Khi chương trình Java thực thi, luồng ln ln thực Đây nguyên nhân quan trọng luồng chính: Các luồng tạo từ Nó luồng cuối kết thúc việc thực Trong chốc lát luồng ngừng thực thi, chương trình bị chấm dứt Cho dù luồng tạo cách tự động với chương trình thực thi, điều khiển thông qua luồng đối tượng Đa luồng (Multithreading) 15 Các luồng tạo từ hai đường: Trình bày lớp lớp lớp luồng, nơi mà phương thức run() lớp luồng cần ghi đè Lấy ví dụ: Class Mydemo extends Thread { //Class definition public void run() { //thực thi } } Trình bày lớp mà lớp thực lớp Runnable Rồi định nghĩa phương thức run() Class Mydemo implements Runnable { //Class definition public void run() { //thực thi } } Chương trình 8.1 điều khiển luồng Chương trình 8.1 import java.io.*; public class Mythread extends Thread{ /** * Mythread constructor comment */ public static void main(String args[]){ Thread t = Thread.currentThread(); System.out.println("The current Thread is :" + t); t.setName("MyJavaThread"); System.out.println("The thread is now named: " + t); try{ for(int i = 0; i