Bài giảng Lập trình Java - Bài 3: Đa luồng - Trường Đại học FPT
Khái niệm multitasking và multithreading
Khái niệm ‘thread’ – luồng
Thread hiện thời
Các trạng thái của thread
Khởi tạo thread
Quản lý thread
Trang 1
Trang 2
Trang 3
Trang 4
Trang 5
Trang 6
Trang 7
Trang 8
Trang 9
Trang 10
Tải về để xem bản đầy đủ
Bạn đang xem 10 trang mẫu của tài liệu "Bài giảng Lập trình Java - Bài 3: Đa luồng - Trường Đại học FPT", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Bài giảng Lập trình Java - Bài 3: Đa luồng - Trường Đại học FPT
LẬP TRÌNH JAVA BÀI 3: Đa luồng Nhắc lại bài trước Các loại luồng dữ liệu Xử lý nhập xuất bằng luồng byte Truy cập file ngẫu nhiên Xử lý nhập xuất bằng luồng character Sử dụng try catch trong nhập/xuất Chuyển đổi dữ liệu kiểu số 2 Nội dung bài học Khái niệm multitasking và multithreading Khái niệm ‘thread’ – luồng Thread hiện thời Các trạng thái của thread Khởi tạo thread Quản lý thread 3 Khái niệm Multitasking và Multithreading Multitasking: Là khả năng chạy đồng thời một hoặc nhiều chương trình cùng một lúc trên một hệ điều hành. Internet Explorer Microsoft Excel Window Media Player Multithreading: Là khả năng thực hiện đồng thời nhiều phần khác nhau của một chương trình được gọi là thread. Sheet1 Sheet2 Sheet3 4 Thread là gì? 5 Thread là đơn vị nhỏ nhất của mã thực thi mà đoạn mã đó thực hiện một nhiệm vụ cụ thể. Một ứng dụng có thể được chia nhỏ thành nhiều nhiệm vụ và mỗi nhiệm vụ có thể được giao cho một thread. Nhiều thread cùng thực hiện đồng thời được gọi là đa luồng (multithread). Các quá trình đang chạy dường như là đồng thời, nhưng thực ra nó không phải là như vậy. Current thread 6 Current thread: Là thread hiện tại đang hoạt động. Vòng đời của một thread 7 Running Ready Sleeping Waiting Dead Blocked New Các trạng thái của thread 8 New: Một thread ở trạng thái ‘new’ nếu bạn tạo ra một đối tượng thread nhưng chưa gọi phương thức start(). Ready: Sau khi thead được tạo, nó sẽ ở trạng thái sẵn sàng (ready) chờ phương thức start()gọi nó. Các trạng thái của thread 9 Running: Thread ở trạng thái chạy (đang làm việc) Sleeping: Phương thức sleep() sẽ đưa thead vào trạng thái ‘sleeping’ - dừng lại tạm thời. Sau thời gian ‘sleeping’ thread lại tiếp tục hoạt động. Các trạng thái của thread 10 Waiting: Khi method wait()hoạt động, thread sẽ rơi vào trạng trạng thái ‘waiting’-đợi. Method này được sử dụng khi hai hoặc nhiều thread cùng đồng thời hoạt động. Blocked: Thread sẽ rơi vào trạng thái ‘blocked’- bị chặn khi thread đó đang đợi một sự kiện nào đó của nó như là sự kiện Input/Output. Dead: Thread rơi vào trạng thái ‘dead’-ngừng hoạt động sau khi thực hiện xong phương thức run() hoặc gọi phương thức stop(). 11 Hệ thống xử lý đa luồng trong Java được xây dựng trên class Thread và interface Runnable trong packaged java.lang. Có 2 cách để tạo một thread mới Kế thừa từ class Thread Thực thi interface Runable Khởi tạo thread 12 Tạo thread bằng cách sử dụng interface Runable: 1. Viết 1 class thực thi interface Runable và viết lại phương thức ‘public void run()’ 2. Tạo ra 1 object vừa thực thi interface Runnable. 3. Tạo ra 1 object của class Thread với tham số truyền vào là object thực thi interface Runable. 4. Gọi phương thức start() để chạy thread Khởi tạo thread 13 File FirstThread.java Khởi tạo thread 14 Ví dụ: SecondThread.java: File SecondThread.java Khởi tạo thread 15 File ThreadDemo.java Khởi tạo thread 16 Phương thức Ý nghĩa final String getName() Lấy ra tên của thread final int getPriority() Lấy ra thứ tự ưu tiên của thread final boolean isAlive() Kiểm tra 1 thread vẫn còn chạy hay không final void join() Chờ đến khi 1 thread ngừng hoạt động void run() Chạy một một thread static void sleep(long milliseconds) Tạm ngừng hoạt động của 1 thread với một khoảng thời gian là mili giây void start() Bắt đầu 1 thread bằng cách gọi run() Khởi tạo thread Tạo thread bằng cách sử dụng kế thừa class Thread 17 Khởi tạo thread 18 Thực hiện 1 công việc bằng nhiều thread, cách 1 OUTPUT task one task one Khởi tạo thread 19 Cách 2 OUTPUT task one task one task one Khởi tạo thread 20 Th ự c h iệ n n h iề u c ô n g v iệ c b ằn g n h iề u t h re ad Khởi tạo thread 21 Thực hiện nhiều công việc bằng nhiều thread Khởi tạo thread 22 Sự khác nhau giữa thực thi interface Runnable và kế thừa từ class Thread Khởi tạo thread 23 OUTPUT Implements Runnable:Counter=1 Implements Runnable:Counter=2 ExtendsThread: Counter=1 ExtendsThread: Counter=1 Sự khác nhau giữa thực thi interface Runnable và kế thừa từ class Thread Khởi tạo thread Thứ tự ưu tiên giữa các tiến trình Phương thức join() Đồng bộ hóa thread Đồng bộ hóa block Mối quan hệ giữa các thread Hiện tượng dead lock (bế tắc) Daemon thread Gabage Collection thread Phương thức finalize() 24 Quản lý thread Thứ tự ưu tiên thread • NORM_PRIORITY 5 • MAX_PRIORITY 10 • MIN_PRIORITY 1 Các hằng số biểu thị độ ưu tiên • NORM_PRIORITY Giá trị mặc định cho thứ tự ưu tiên • final void setPriority(int p) • final int getPriority() Hai phương thức 25 26 Phương thức join() 27 Phương thức join() 28 OUTPUT Trong run() Thread 1 0 1 2 3 4 5 6 7 8 9 Trong run() Thread 2 0 1 2 3 4 5 6 7 8 9 Phương thức join() Đồng bộ hóa thread Đồng bộ hóa chính là việc sắp xếp thứ tự các luồng khi truy xuất vào cùng đối tượng sao cho không có sự xung đột dữ liệu. Để đảm bảo rằng một nguồn tài nguyên chia sẻ được sử dụng bởi một thread tại một thời điểm, chúng ta sử dụng đồng bộ hóa (synchronization). 29 Đồng bộ hóa Thread (tiếp) Một ‘monitor’- là một công cụ giám sát hỗ trợ cho việc đồng bộ hóa các luồng. Tại một thời điểm chỉ có 1 thread được vào ‘monitor’. Khi một thread vào được ‘monitor’ thì tất cả các thread khác sẽ phải đợi đến khi thread này ra khỏi ‘monitor’. Để đưa một thread vào ‘monitor’, chúng ta phải gọi một phương thức có sử dụng từ khóa synchronized. Sau khi thread đang chiếm giữ monitor này kết thúc công việc và thoát khỏi monitor thì luồng tiếp theo mới có thể ‘vào được’ monitor. 30 Đồng bộ hóa thread (tiếp) 31 Không sử dụng từ khóa ‘synchronized’ Đồng bộ hóa th
File đính kèm:
- bai_giang_lap_trinh_java_bai_3_da_luong_truong_dai_hoc_fpt.pdf