Bài giảng lập trình hướng đối tượng
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
BÀI GIẢNG MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Học kỳ/Năm biên soạn: I – 2009/2010
Trang 212/09/12 2
Lập trình đa luồng
(Thread)
Trang 3 Liên lạc giữa các thread
Giao diện Executors
Trang 4 Hai cách tạo Thread:
Tạo dẫn xuất từ lớp thread của Java
Cài đặt giao tiếp Runnable
Trang 512/09/12 5
Tổng quan về thread
Trang 612/09/12 6
Vòng đời của một Thread
A thread can in one of several possible states:
Trang 712/09/12 7
Vòng đời của một Thread
Trang 812/09/12 8
Vòng đời của một Thread (tiếp)
Bước 1: Tạo mới một thread (theo một trong hai cách)
Bước 2: Khai báo đối tượng thread => chuyển về trạng thái sẵn sàng (Ready)
Bước 3: Khởi động Thread dùng phương thức Start => chuyển sang trạng thái Running
Bước 4: Tạm dừng một Thread thông qua lệnh Sleep => Chuyển về trạng thái Waiting rồi Ready
Bước 5: Chấm dứt một Thread bằng lệnh Stop =>
Chuyển sang trạng thái Dead
Trang 912/09/12 9
Tạo thread mới
Trang 1012/09/12 10
Tạo thread mới – Cách 1
Trang 1112/09/12 11
Tạo thread mới – Cách 1
Trang 1212/09/12 12
Tạo thread mới – Cách 1
Trang 1312/09/12 13
Tạo thread mới – Cách 2
Trang 1412/09/12 14
Tạo thread mới – Cách 2
Trang 1512/09/12 15
Phân biệt hai cách tạo Thread
Implementing the Runnable interface
May take more work since we still
Declare a Thread object
Call the Thread methods on this object
Your class can still extend other class
Extending the Thread class
Easier to implement
Your class can no longer extend any other class
Trang 1612/09/12 16
Các phương thức trong thread
Trang 1712/09/12 17
Ví dụ về thread - 1
Trang 1812/09/12 18
Ví dụ về thread - 2
Trang 1912/09/12 19
Ví dụ về thread - 3
Trang 2012/09/12 20
Ví dụ về thread - 3
Trang 2112/09/12 21
Ví dụ về thread - 3
Trang 22 Nhiều trường hợp cần giao tiếp giữa các thread để
hiểu trạng thái và hoạt động của nhau
Trang 2312/09/12 23
Ví dụ không đồng bộ
Trang 2412/09/12 24
Ví dụ không đồng bộ
Trang 2512/09/12 25
Ví dụ không đồng bộ
Trang 2612/09/12 26
Đồng bộ: Khóa một đối tượng
Sử dụng từ khóa synchronized
Đặt trước tên các phương thức cần đồng bộ
Có thể đồng bộ các đối tượng chứa phương thức có khai báo synchronized.
synchronized (<object>) {
//statements to be synchronized
}
Trang 2712/09/12 27
Ví dụ 1
Trang 2812/09/12 28
Ví dụ 1
Trang 2912/09/12 29
Ví dụ 1
Trang 3012/09/12 30
Ví dụ 2
Trang 3112/09/12 31
Ví dụ 2
Trang 3212/09/12 32
Ví dụ 2
Trang 3312/09/12 33
Vấn đề giao tiếp giữa các thread
Trang 3412/09/12 34
Vấn đề giao tiếp giữa các thread
Trang 3512/09/12 35
Ví dụ: Producer-Consumer
Trang 3612/09/12 36
Ví dụ: Producer-Consumer
Trang 3712/09/12 37
Ví dụ: Producer-Consumer
Trang 3812/09/12 38
Ví dụ: Producer-Consumer
Trang 3912/09/12 39
Ví dụ: Producer-Consumer
Trang 4012/09/12 40
Ví dụ: Fixed Producer-Consumer
Trang 4112/09/12 41
Ví dụ: Fixed Producer-Consumer
Trang 4212/09/12 42
Ví dụ: Fixed Producer-Consumer
Trang 4312/09/12 43
Ví dụ: Fixed Producer-Consumer
Trang 4412/09/12 44
Giao diện Executor
Cách chạy thông thường
(BEFORE) Executing Runnable tasks:
Phải sử dụng thread pooling
Khó thiết kế một cách tối ưu
Khó khăn khi muốn thoát hay muốn dừng giữa chừng một thread
Trang 4512/09/12 45
Giao diện Executor
Giải pháp: Sử dụng giao diện Executor.
Trang 4612/09/12 46
Giao diện Executor