Professional Documents
Culture Documents
Group 2
Group 2
Nhóm:
Nhóm: 22
•• Võ
Võ Thành
Thành Đô
Đô –– 19521365
19521365
•• Nguyễn
Nguyễn Quốc
Quốc Viễn
Viễn -- 19521103
19521103
•• Nguyễn
Nguyễn Văn
Văn Tài
Tài -- 19522154
19522154
•• Võ
Võ Quốc
Quốc Đăng
Đăng -- 19520447
19520447
Thread
Một Thread là một thực thể trong một Process, là đối tượng được lên kế hoạch để
thực thi.
Trong Process thường sẽ có nhiều Thread và tất cả các Thread này sẽ chia sẻ không
gian địa chỉ ảo và tài nguyên hệ thống trong Process.
Ngoài ra mỗi Thread lại có công việc riêng của nó đó là: duy trì xử lý ngoại lệ, ưu
tiên lập lịch trình, lưu dữ cục bộ luồng,...
Môi trường Thread có thể bao gồm: phần đăng kí Thread với máy chủ, nhân stack, ...
quan trọng là có một môi trường (Thread cũng có ngữ cảnh riêng của nó).
Nhiều
Có thể đánh
Thread= Thread thực
dấu là Độ ưu tiên
luồng thi đồng
Deamon
thời
Để tạo mới Thread ta có hai cách.
Cách thứ nhất là kế thừa (extends) từ class Thread:
Trong Java chỉ có đơn kế thừa nên cách thứ hai sẽ linh động hơn.
New: Khi ở trạng thái này,
Thread vẫn chưa bắt đầu thực
thi code ở bên trong nó
Runnable/Ready: Trạng
thái này có được sau khi
sử dụng phương thức
start(). Block/Sleeping/ Waiting:
Thread sẽ rơi vào trạng
thái block nếu một trong
các action sau đây xảy ra:
Dead: Thread sẽ rơi vào trạng (*)
thái dead với 1 trong 2 lý do
sau:
- Thực thi xong phương
thức run()
- Uncaught, stop()
Running
(*) - Sleep()
- Thread gọi một operation mà nó đang bị blocking trên
Input/Output.
- Thread cố gắng giành lấy khóa(lock) trong khi khóa này đang
được nắm giữ bởi một Thread khác.
- Thread đang đợi một điều kiện nào đó để thực thi.
Multithreading
Multithreading là một mô hình xử lý chương trình cho phép nhiều thread được
tạo ra trong một process, các thread chạy độc lập và chia sẻ cùng nhau nguồn tài
nguyên của process.
Vì vậy khi một process bị hủy, tất cả các thread tương ứng cũng dừng theo.
Ví dụ về web browser: sẽ có một thread xử lý UI, một thread khác sẽ chạy song
song để lấy dữ liệu in ra màn hình.
Java code:
Multithreading
Multithreading
Ưu điểm:
Nhược điểm: Khó khăn trong code, debug, test, code porting.
AsyncTask
Params: Là giá trị ((biến) được truyền vào khi gọi thực thi tiến trình
và nó sẽ được truyền vào doInBackground
AsyncTask Progress: Là giá trị (biến) dùng để update giao diện diện lúc tiến
trình thực thi, biến này sẽ được truyền vào hàm onProgressUpdate.
Result: Là biến dùng để lưu trữ kết quả trả về sau khi tiến trình thực
hiện xong.
=> Những đối số nào không sử dụng trong quá trình thực thi tiến trình
thì ta thay bằng Void.
AsyncTask
Thông thường trong 1 AsyncTask sẽ chứa 4 hàm, đó là :
onPreExecute() : Tự động được gọi đầu tiên khi tiến trình được kích hoạt.
doInBackground(): Được thực thi trong quá trình tiến trình chạy nền, thông qua hàm này để ta
gọi hàm onProgressUpdate để cập nhật giao diện (gọi lệnh publishProgress). Ta không thể cập
nhật giao diện trong hàm doInBackground().
onPostExecute(): Sau khi tiến trình kết thúc thì hàm này sẽ tự động xảy ra. Ta có thể lấy được
kết quả trả về sau khi thực hiện tiến trình kết thúc ở đây.
=> Trong 4 hàm trên thì hàm doInBackground() bắt buộc phải tồn tại, còn các hàm khác có thể
khuyết, nhưng các bạn nên sử dụng đầy đủ 4 hàm đã nêu.
AsyncTask
AsyncTask
Demo:
Layout
AsyncTask
Demo: