0% found this document useful (0 votes)
14 views

Day 5 - Threading

Day 5 - Threading

Uploaded by

Tuan Nguyen
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
14 views

Day 5 - Threading

Day 5 - Threading

Uploaded by

Tuan Nguyen
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 53

Fresher Android

Đa luồng – Day 5

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 1


`

Nội dung bài


học
Confidenti 2
al
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

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 3


Khái niệm Multitasking và Multithreading

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 4


Thread là gì?

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 5


Current thread
 Current thread: Là thread hiện tại đang hoạt động.

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 6


Vòng đời của một thread

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 7


Các trạng thái của thread

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 8


Các trạng thái của thread

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 9


Các trạng thái của thread

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 10


Khởi tạo thread
 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.

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 11


Khởi tạo thread
 Tạo thread bằng cách sử dụng interface Runable:

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 12


Khởi tạo thread

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 13


Khởi tạo thread

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 14


Khởi tạo thread

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 15


Tạo thread bằng cách sử dụng kế thừa class
Thread
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()

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 16


Khởi tạo thread

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 17


Khởi tạo thread

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 18


Khởi tạo thread

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 19


Khởi tạo thread

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 20


Khởi tạo thread

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 21


Khởi tạo thread

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 22


Khởi tạo thread

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 23


Quản lý
10/24/2024
thread
09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 24
Quản lý 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()
10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 25
Thứ tự ưu tiên thread

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 26


Phương thức join()

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 27


Phương thức join()

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 28


Phương thức join()

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 29


Đồ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).

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 30


Đồng bộ hóa thread
 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ệc09e-BM/DT/FSOFT
10/24/2024
và thoát khỏi monitor thì luồng tiếp 31
- ©FPT SOFTWARE – Fresher Academy - Internal Use
Đồng bộ hóa thread

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 32


Đồng bộ hóa thread

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 33


Đồng bộ hóa thread

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 34


Đồng bộ hóa block

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 35


Đồng bộ hóa block
Đồng bộ hóa method có thể được viết lại bằng đồng bộ hóa block
như sau:

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 36


Mối quan hệ giữa các thead

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 37


Mối quan hệ giữa các thead
Phương thức notify() ‘đánh
thức’ thread đầu tiên đang ở
Phương thức wait() sẽ đưa trạng thái ‘sleeping’ bởi vì
thread vào trạng thái ‘sleeping’. phương
phức wait() bị gọi.

RelationShip

Phương thức notifyAll() ‘đánh Khi tất cả các thread thoát khỏi
thức’ tất cả các thread đang ở trạng thái spleeping, thread có
trạng thái ‘sleeping’ bởi vì độ ưu tiên cao nhất sẽ chạy
phương đầu tiên.
thức wait() bị gọi.
10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 38
Mối quan hệ giữa các thead

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 39


Mối quan hệ giữa các thead

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 40


Mối quan hệ giữa các thead

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 41


Mối quan hệ giữa các thead

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 42


Mối quan hệ giữa các thead

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 43


Mối quan hệ giữa các thead

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 44


`

Dead lock và
Daemon
threads
Confidenti 45
al
Hiện tượng dead lock
• Dead lock: (khóa chết hoặc bế tắc) Là tình huống xảy khi hai hay nhiều tiến trình chờ
đợi lẫn nhau, tiến trình này chờ tiến trình kia kết thúc công việc thì mới tiếp tục được
công việc của mình. Do vậy, các tiến trình này mãi mãi ở trạng thái chờ đợi lẫn nhau
(waiting forever).

Thread Thread
A B

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 46


Daemon threads

2 loại thread trong Java

Daemon threads: Là các


Thread người dùng (user
thread làm việc ở chế độ
thread): Là thread do
nền, cung cấp các dịch vụ
người dùng tạo ra.
cho các thread khác.

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 47


Daemon threads
Khi 1 thread của user kết thúc hoạt
động, JVM sẽ kiểm tra xem còn
thread nào đang chạy không

Nếu có thì sẽ lên lịch làm việc cho


thread tiếp theo.

Nếu chỉ còn các thread ‘daemon’ thì


thread này cũng kết thúc hoạt động.

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 48


Daemon threads
 Chúng ta có thể thiết lập 1 thread là thread ‘daemon’ nếu
chúng ta không muốn chương trình chính phải đợi đến khi
1 thread kết thúc.
 Class Thread có 2 phương thức làm việc với thread
‘Daemon’:
 public final void setDaemon(boolean value)
-> Thiết lập 1 thread là thread ‘daemon’
 public final boolean isDaemon()
-> Kiểm tra xem thread có phải là ‘ daemon’ không.

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 49


Garbage Collection
 Garbage Collection là một trong các thread Daemon (là
luồng thu dọn các dữ liệu không dùng đến – dọn rác)
 Garbage Collection sẽ tự động dọn dẹp: giải phóng vùng bộ
nhớ không còn cần thiết nữa.
 Một object đủ điều kiện để thu gom nếu không có tham
chiếu đến nó hoặc giá trị của nó là null.
 Garbage Collection một thread chạy riêng biệt với độ ưu
tiên thấp.

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 50


Phương thức finalize ()
 Là phương thức được sử dụng cho việc dọn dẹp các vùng
tài nguyên không được dùng nữa trước khi hủy bỏ các đối
tượng.
 Sau khi kết thúc chương trình, trước khi trả điều khiển về
cho hệ điều hành, phương thức finalize() sẽ được gọi bởi
thead ‘Gabage collector’ để thực hiện công việc dọn dẹp.

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 51


Lesson Summary
 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

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 52


Thank you

10/24/2024 09e-BM/DT/FSOFT - ©FPT SOFTWARE – Fresher Academy - Internal Use 53

You might also like