1. Trang chủ
  2. » Giáo án - Bài giảng

Bài 9 Multithreading

51 167 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 51
Dung lượng 256,78 KB

Nội dung

Lập trình Java cơ bản 1 Cao Đức Thông - Trần Minh Tuấn cdthong@ifi.edu.vn , tmtuan@ifi.edu.vn Bài 9. Multithreading 2 • Đa nhiệm và đa tuyến • Tạo lập và sử dụng tuyến • Lớp Thread • Giao tiếp Runnable • Đồng bộ hoá các tuyến • Tuyến ma • Nhóm tuyến • Bài tập Đa nhiệm(multitasking) 3 • Đa nhiệm là kỹ thuật cho phép nhiều công việc đượcthực hiệncùngmột lúc trên máy tính. • Nếu có nhiều CPU, các công việc có thể được thực hiện song song trên từng CPU. Trong trường hợp nhiều công việc cùng chia sẻ một CPU, từng phần của mỗi công việc sẽ được CPU thực hiện xen kẽ. Đa nhiệm(multitasking) 4 Task 1 Task 2 Task 3 Nhiềucông việc thi hành trên mộtCPU Đa nhiệm(multitasking) 5 • Hai kỹ thuật đa nhiệmcơ bản • Đatiến trình (Process-based multitasking): Nhiềuchương trình chạy đồng thời. Mỗi chương trình có một vùng dữ liệu độc lập. • Đatuyến (Thread-based multitasking): Mộtchương trình có nhiều tuyến cùng chạy đồng thời. Các tuyến dùng chung vùng dữ liệu của chương trình. Tuyếnvàđatuyến 6 • Tuyếnlàmạch thi hành độc lập củamộttác vụ trong chương trình. • Mộtchương trình có nhiềutuyếnthựchiện cùng lúc gọilàđatuyến. program program Tạo tuyến 7 • Tuyến trong Java cũng là các đối tượng. • Có hai cách để tạotuyến • Thừakế từ lớp java.lang.Thread • Cài đặtgiaotiếp java.lang.Runnable Cách 1: Kế thừa từ Thread 8 Tạo lớp MyThread kế thừa từ Thread và nạp chồng phương thức run() của lớp Thread. class MyThread extends Thread { …. public void run() { … } } Tạo và thực thi tuyến. Thread th1 = new MyThread(); Thread th2 = new MyThread(); th1.start(); th2.start(); Cách 1: Kế thừa từ Thread 9 • Khi một tuyến được tạo ra, nó cần gọi start() để đặt tuyến ở trạng thái sẵn sàng. Tiếp theo hệ thống sẽ thực thi các câu lệnh trong run() của tuyến đó. • Tuyến sẽ kết thúc khi làm hết lệnh trong run() hoặc khi stop() được gọi. Tạo tuyến 10 Tạotuyếnmới MyThread th1 = new MyThread(); MyThread th2 = new MyThread(); … th1.start(); th2.start(); … Sẵn sàng bắt đầu thực thi tuyến [...]... kết thúc Tiếp theo tuyến G thực thi đến khi kết thúc Cuối cùng tuyến H và I luân phiên thực thi đến khi kết thúc Nhận xét: Các tuyến có độ ưu tiên thấp sẽ có nguy cơ bị trì hoãn vô hạn định A Priority 9 B C Priority 8 Priority 7 D Priority 6 E F G Priority 5 Priority 4 Priority 3 Priority 2 H I Priority 1 14 Ví dụ về đa tuyến • Tạo ra 3 tuyến với độ ưu tiên mặc định Công việc của mỗi tuyến là ngủ trong... sleep time: 1622 Starting threads Threads started, main ends thread1 thread2 thread3 thread1 thread3 thread2 starts to sleep starts to sleep starts to sleep done sleeping done sleeping done sleeping 19 Một số phương thức của Thread • • • • • • • void void void void void void void sleep(long millis); // ngủ yield(); // nhường điều khiển interrupt(); // ngắt tuyến join(); // yêu cầu chờ kết thúc suspend();... 3000 ) ); sharedBuffer.set( count ); System.out.println( "Producer writes " + count); } catch ( InterruptedException e ) { e.printStackTrace(); } } System.out.println( getName() + " finished."); } } 29 Ví dụ về P-C: Không đồng bộ class Consumer extends Thread { private Buffer sharedBuffer; public Consumer( Buffer shared ) { super( "Consumer" ); sharedBuffer = shared; } 30 Ví dụ về P-C: Không đồng bộ

Ngày đăng: 13/05/2014, 11:20

TÀI LIỆU CÙNG NGƯỜI DÙNG

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN

w