Bài giảng Lập trình Java - Chương VIII: Multithreading
Bạn đang xem tài liệu "Bài giảng Lập trình Java - Chương VIII: Multithreading", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- bai_giang_lap_trinh_java_chuong_viii_multithreading.ppt
Nội dung text: Bài giảng Lập trình Java - Chương VIII: Multithreading
- LOGO Multithreading Core Java / Session 27 / 1 of 16
- Mục tiêu ❖Thread, multithreading là gì ? ❖Tạo và quản lý các thread ? ❖Tìm hiểu chu kỳ hoạt động của thread ❖Thread daemon là gì ? Úng dụng ? ❖Độ ưu tiên của thread ? và thay đổi ? ❖Đồng bộ các thread ?
- Thread, MultiThread ? ❖Thread là đơn vị nhỏ nhất của một khối lệnh thực hiện một công việc nào đó một cách độc lập. ❖MultiThread là khả năng thực hiện nhiều thread đồng thời trong cùng một tiến trình xử lý (process) ❖Mỗi chương trình java có ít nhất 1 thread ❖Thread chính của chương trình được tự động tạo ra khi chương trình thực hiện. ❖Các thread còn lại được tạo ra từ thread chính ❖Thread chính kết thúc thực hiện sau cùng
- Tạo và quản lý thread (1) ❖Có 2 cách tạo ra một thread: ▪ Cách 1: Thừa kế tù class Thread và override phương thức run() class MyThread extends Thread{ public void run(){ // code thuc hien khi start thread } } ▪ Tạo và chạy MyThread : MyThread mt = new MyThread(); mt.start(); // gọi phương thức run()
- Tạo và quản lý thread (2) ▪ Cách 2 : Thực hiện interface Runnable và định nghĩa phương thức run() của interface này. class MyRunnable implments Runnable{ public void run() { // code chay khi start thread o day } } ▪ Tạo và chạy MyRunnable như sau: MyRunnable mr = new MyRunnable (); Thread th = new Thread(mr); th.start(); // gọi phương thức run()
- Class Thread (1) ❖Khởi dựng ▪ public Thread(Runnable target) ▪ public Thread(ThreadGroup group, Runnable target) ▪ public Thread(String name) ▪ public Thread(ThreadGroup group, String name) ❖Mỗi thread có một độ ưu tiên (ĐƯT : 1- >10). Thread có ĐƯT lớn hơn sẽ thực hiện trước. ❖ĐƯT/ThreadGroup mặc định bằng ĐƯT/ThreadGroup của thread tạo ra nó. ❖Các phương thức quản lý ĐƯT
- Class Thread (2) ❖String getName( ), void setName(String name) ❖void start(), void stop() ❖void suspend(), void resume( ) ❖booleab isDaemon( ), / void setDaemon(Boolean on) ❖boolean isAlive( ) ❖void join() ❖void yeild() ❖void sleep(long milis) ❖ThreadGroup getThreadGroup()
- Chu kỳ hoạt động của một thread
- Thread Daemon ❖Trong java có 2 kiểu thread: ▪ Thread người dùng (user thread) ▪ Thread nền (daemon thread) ❖Daemon thread kết thúc khi và chỉ khi các thread trong process đã kết thúc. ❖Daemon thread thường được sử dụng làm các dịch vụ đáp ứng cho các thread khác cũng như nhiệm vụ thu gom sau cùng
- LOGO Thread Synchronisation Core Java / Session 27 / 10 of 16
- Đồng bộ thread ❖ Để truy xuất tài nguyên chung một cách tuần tự bởi nhiều thread, người lập trình java sử dụng modifier synchronized. ❖ synchronized được sử dụng để định nghĩa một phương thức hay một khối lệnh với mục đích đồng bộ công việc giữu các thread. ❖ Khi một thread đang thực hiện trong một synchronized method thì các thread hoặc synchronized method khác cố gọi nó trên cùng một instance của ‘monitor’ sẻ phải đợi. ❖ Khi thực hiện mã lệnh trong synchronized người ta goi vao monitor hay tìm khoa.
- Monitor, wait(), notify(), notifyAll() ❖Monitor là đối tượng có thể tạm dừng hay làm sống lại các thread ▪ Để tạm dừng thread đang vào monitor ta gọi phương thức wait() của monitor ▪ Để làm sống lại thread đang ở trạng thái đợi của monitor ta gọi phương thức notify() hoặc notifyAll() của monitor • Gọi notify() nếu muốn làm sống 1 thread đỉnh • Gọi notifyAll() nếu muốn làm sống tất cả thread đỉnh ❖Đặc điểm của wait(), notify(), notifyAll() ▪ Chỉ có tác dụng bên trong sinchronized ▪ Chúng là phương thức của monitor chứ
- Deadlock ❖Là trạng thái dừng của 2 thread đợi lẫn nhau ❖Hiện tượng này xảy ra khi : ▪ Thread 1 vào monitor trên đối tượng object 1 ▪ Thread 2 vào monitor trên đối tượng object 2 ▪ Thread 1 gọi 1 phương thức synchronized của object 2