Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 34 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
34
Dung lượng
605 KB
Nội dung
Giới thiệu về Threads Bài 07 Bài 07 2 / 22 Nội dung chính Định nghĩa threads Định nghĩa về multithreading Lợi ích của multithreading Tạo threads Thảo luận về trạng thái của Threads Quản lý threads Thiết lập thuộc tính cho threads Tìm hiểu về daemon thread Bài 07 3 / 22 Multitasking & Multithreading Multitasking là khả năng chạy 1 or nhiều chương trình cùng lúc. Operating system sẽ điều khiển bằng cách lập lịch cho các chương trình đó. Multithreading là khả năng thực hiện các phần khác nhau của một chương trình một cách độc lập nhau. Bài 07 4 / 22 Thread Thread là một đoạn mã nhỏ nhất mà có thể thực thi được, nó thực thi một nhiệm vụ cụ thể nào đó. Một ứng dụng có thể chia làm nhiều nhiệm vụ, mỗi nhiệm vụ có thể gán cho một thread Nhiều thread cùng thực hiện đồng thời, gọi là Multithreading. Các thread có vẻ như thực hiện đồng thời, nhưng thực tế ko phải vậy… Bài 07 5 / 22 Ưu điểm của Multithreading Multithreading có chi phí thấp hơn multitasking (về không gian, t/g) Trong multitasking, các tiến trình chạy trên các địa chỉ riêng biệt Các thread trong multithreading có thể chia sẻ cùng không gian bộ nhớ. Các tiến trình trong multitasking gọi nhau phải chịu chi phí lơn hơn các thread trong multithreading. Multithreading cho phép chúng ta thiết kế chương trình hiệu quả hơn mà sử dụng ít tài nguyên CPU Multithreading còn cho phép chúng ta điều khiển cho các thread sleep một t/g trong khi các thread khác vẫn hoạt động mà ko làm cho hệ thống bị pause. Bài 07 6 / 22 ứng dụng của thread Tính toán 2 phép tính đồng thời Vừa nghe nhạc, vừa xem ảnh đồng thời Hiển thị cùng lúc nhiều ảnh trên màn hình Bài 07 7 / 22 Tạo threads Chương trình sẽ bị ngắt quãng khi thread main bị stop. Main thread có thể được điều khiển thông qua đối tượng thread. Tham chiếu đến main thread có thể nhận được bằng cách gọi method currentThread() của lớp Thread. Khi chương trình java thực hiện thì luôn có một thread chạy đó là thread main Bài 07 8 / 22 Tạo thread Đối tượng thread có thể được tạo theo 2 cách: Định nghĩa một lớp là lớp con của lớp Thread được định nghĩa trong gói java.lang class mythread extends Thread Định nghĩa một lớp là implements của Runnable interface. class mythread implements Runnable Bài 07 9 / 22 Tạo thread Khi phương thức start() được gọi, thì tài nguyên hệ thống sẽ được cấp phát cho thread đó và nó sẽ được lập lịch để chạy. Sau đó phải gọi phương thức run() Sau khi một thread mới được khởi tạo, chúng ta có thể gọi phương thức start()để start một thread, trái lại nó sẽ là một đối tượng thread rỗng, ko được cấp phát tài nguyên. Mythread t = new Mythread(); t.start(); Bài 07 10 / 22 public void run() { while(true) { try { System.out.println("This is the child thread"); Thread.sleep(500); } catch(InterruptedException e) { } } } } Tạo thread Ví dụ Tạo một thread bằng cách kế thừa lớp Thread. class MyThread extends Thread { public static void main(String args[]) { MyThread Objex = new MyThread(); Objex.create(); System.out.println("This is the main thread"); } public void create() { Thread Objth = new Thread(this); Objth.start(); } Output [...]... Thread.sleep(500); { } Thread Objth = new Thread(this); catch(InterruptedException e) Objth.start(); {} } } } } Output Bài 07 11 / 22 Trạng thái của Thread Born: một thread vừa được tạo ra thì nó ở trạng thái born Ready: Sau khi thread được tạo, nó ở trạng thái sẵn sàng đợi phương thức start() được gọi Bài 07 12 / 22 Trạng thái của thread Running: Thread ở trạng thái running khi phương thực start đã được... sleeping một khoảng thời gian Bài 07 13 / 22 Trạng thái của thread Waiting: Thread sẽ ở trạng thái này khi phương thức wait() được gọi Nó được sử dụng khi 2 hay nhiều thread chạy cùng nhau Blocked: thread rơi vào trạng thái này khi nó đợi dữ liệu như thao tác input/output Dead: thread rơi vào trạng thái này khi phương thức run() kết thúc hoặc phương thức stop() được gọi Bài 07 14 / 22 Các trạng thái... được gọi Bài 07 14 / 22 Các trạng thái của thread New Thread (BORN) READY SLEEPING RUNNING WAITING BLOCKED DEAD Bài 07 15 / 22 Một số method của lớp thread final boolean isAlive(): trả về giá trị true nếu thread còn tồn tại final String getName(): trả về tên của thread void start(): Bài 07 16 / 22 Một số method của lớp thread final void join() throws InterruptedException: đợi cho đến khi thread... static void yield(): thread hiện tại sẽ tạm ngừng để thread khác chạy final void setName(String name): Bài 07 17 / 22 Một số method của lớp thread final boolean isDaemon(): kiểm tra xem có phải là Daemon thread ko static int activeCount(): đếm số thread đang hoạt động static void sleep(): Bài 07 18 / 22 Quản lý thread Thread có thể được xét mức ưu tiên khác nhau (là các hằng của lớp Thread)... nó sẽ thoát Bài 07 20 / 22 Daemon threads Chúng ta cũng có thể thiết lập cho một thread là Daemon thread nếu muốn chương trình chính đợi cho đến khi thread kết thúc Thread có 2 phương thức để làm việc với Daemon thread: public final void setDaemon(boolean value) : Gán một Thread thành Daemon thread public final boolean isDaemon() : Kiểm tra xem 1 thread có phải là Daemon thread ko? Bài 07 21... hiện thời thành không ngắt Bài 07 25 / 22 Đồng bộ luồng Khi nhiều luồng cùng truy xuất đến một nguồn tài nguyên -> cần đồng bộ Ví dụ: đọc/ghi trên cùng 1 file, sửa đổi trên cùng 1 đối tượng Trong trường hợp này dữ liệu cần phải được đồng bộ, đảm bảo được trạng thái an toàn Để đảm bảo tài nguyên chia sẻ chỉ được truy xuất bởi một luồng -> ta sử dụng cơ chế synchronization Bài 07 26 / 22 Đồng bộ... sẽ được mở khoá Bài 07 27 / 22 Đồng bộ luồng Trong khi thực thi phương thức synchronized, một tuyến có thể gọi wait() để chuyển sang trạng thái chờ cho đến khi một điều kiện nào đó xảy ra Khi thực hiện xong công việc trên đối tượng, một tuyến cũng có thể thông báo (notify) cho các tuyến khác đang chờ để truy nhập đối tượng Deadlock: Tuyến A chờ tuyến B và tuyến B cũng chờ tuyến A Bài 07 28 / 22... sharedBuffer = shared; System.out.println( getName() + " finished."); } } }} Bài 07 31 / 22 Kết quả khi không đồng bộ Producer writes 1 Producer writes 2 Consumer reads 2 Producer writes 3 Producer writes 4 Consumer reads 4 Producer writes 5 Producer finished Consumer reads 5 Consumer reads 5 Consumer reads 5 Consumer finished Bài 07 32 / 22 Vídụvề P-C: đồng bộ class Buffer // Thiết kế lại lớp Buffer... } notify(); return buffer; buffer = value; } writable = false; } notify(); } Bài 07 33 / 22 Kết quả khi đồng bộ Producer writes 1 Consumer reads 1 Producer writes 2 Consumer reads 2 Producer writes 3 Consumer reads 3 Producer writes 4 Consumer reads 4 Producer writes 5 Producer finished Consumer reads 5 Consumer finished Bài 07 34 / 22 ... value is – value is Giá trị mặc định là: NORM_PRIORITY 2 phương thức để thiết lập priority: final void setPriority(int newp): thay đổi mức ưu tiên hiện tại final int getPriority(): trả về mức ưu tiên Bài 07 19 / 22 Daemon threads 2 loại thread trong java: User threads: đc tạo bởi người dùng Daemon threads: các thread làm việc dưới background và nó cung cấp dịch vụ cho các thread khác . Giới thiệu về Threads Bài 07 Bài 07 2 / 22 Nội dung chính Định nghĩa threads Định nghĩa về multithreading Lợi. hệ thống bị pause. Bài 07 6 / 22 ứng dụng của thread Tính toán 2 phép tính đồng thời Vừa nghe nhạc, vừa xem ảnh đồng thời Hiển thị cùng lúc nhiều ảnh trên màn hình Bài 07 7 / 22 Tạo threads Chương. kết thúc hoặc phương thức stop() được gọi. Bài 07 15 / 22 Các trạng thái của thread New Thread (BORN) READY RUNNING DEAD SLEEPING WAITING BLOCKED Bài 07 16 / 22 Một số method của lớp thread final