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

Bài giảng Lập trình Java - Bài 3: Đa luồng - Trường Đại học FPT trang 1

Trang 1

Bài giảng Lập trình Java - Bài 3: Đa luồng - Trường Đại học FPT trang 2

Trang 2

Bài giảng Lập trình Java - Bài 3: Đa luồng - Trường Đại học FPT trang 3

Trang 3

Bài giảng Lập trình Java - Bài 3: Đa luồng - Trường Đại học FPT trang 4

Trang 4

Bài giảng Lập trình Java - Bài 3: Đa luồng - Trường Đại học FPT trang 5

Trang 5

Bài giảng Lập trình Java - Bài 3: Đa luồng - Trường Đại học FPT trang 6

Trang 6

Bài giảng Lập trình Java - Bài 3: Đa luồng - Trường Đại học FPT trang 7

Trang 7

Bài giảng Lập trình Java - Bài 3: Đa luồng - Trường Đại học FPT trang 8

Trang 8

Bài giảng Lập trình Java - Bài 3: Đa luồng - Trường Đại học FPT trang 9

Trang 9

Bài giảng Lập trình Java - Bài 3: Đa luồng - Trường Đại học FPT trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 50 trang Danh Thịnh 08/01/2024 4920
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

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:

  • pdfbai_giang_lap_trinh_java_bai_3_da_luong_truong_dai_hoc_fpt.pdf