Tải bản đầy đủ (.ppt) (80 trang)

lập trình mạng chapter 6 java tcp

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (918.05 KB, 80 trang )

Chapter 6
Threads in Java
1
Java Simplified / Session 22 / 2 of 45

Multitasking vs MultiThreading

Define a thread

Define multithreading

List benefits of multithreading

Create threads

Discuss thread states

Manage threads

Explain how to set thread priorities

Describe a daemon thread
Objectives
2
Java Simplified / Session 22 / 3 of 45

Multitasking:

là khả năng của một OS cho phép chạy nhiều chương trình đồng thời
trên một CPU (đơn nhân)


Thực hiện bằng cách phân bổ thời gian chuyển hoạt động từ một
chương này sang chương trình khác (ms).

Process

Khi chạy 1 ứng dụng (program) OS sẽ cấp phát riêng cho nó bộ nhớ và
các tài nguyên khác -> 1 process.

Các bộ nhớ và các tài nguyên của 1 process chỉ nó mới được phép truy
nhập

Thread:

Một process có thể có một hoặc nhiều tác vụ khác nhau và có thể chạy
đồng thời.

Mỗi tác vụ là một thread
Một số khái niệm
3
Java Simplified / Session 22 / 4 of 45

Thread là đơn vị nhỏ nhất trong mã chương trình có thể thực
thi một công việc riêng biệt.

Thread hình thành gồm:

một định danh luồng (thread ID),

một bộ đếm chương trình,


tập thanh ghi và ngăn xếp.

Nó chia sẻ với các luồng khác thuộc cùng một tiến trình phần
mã, phần dữ liệu, và tài nguyên hệ điều hành như các tập tin
đang mở và các tín hiệu.
Thread
4
Java Simplified / Session 22 / 5 of 45

Truyền thống: Một tiến trình có một luồng điều
khiển đơn:
Chỉ có một tuyến đoạn đang chạy tại một thời điểm cho
trước. Các tuyến đoạn khác phải chờ.

Hệ điều hành duy trì một hàng đợi các tuyến đoạn và phân bổ thời
gian CPU cho chúng

Gây lãng phí CPU và bộ nhớ

Hiện đại: Một tiến trình có nhiều luồng điều khiển,
nó có thể thực hiện nhiều hơn một tác vụ tại một
thời điểm.
Khi đó, các tuyến đoạn có thể truy xuất tới tài
nguyên dùng chung để cùng làm việc hợp tác với
nhau => MultiThreads
MultiThread
5
Java Simplified / Session 22 / 6 of 45
Single vs. Multi-Threaded
6

Java Simplified / Session 22 / 7 of 45
Step 1 Step 2 … Step n
Step 1 Step 2 …
Step n
Step 1 Step 2 … Step n
Single vs. Multi-Threaded
7

A process that is made of one thread is known as
single-threaded process.


A process that creates two or more threads is
called a multithreaded process.
Java Simplified / Session 22 / 8 of 45
Applications of Multithread

Web Browser IE: Thread hiện thị hình ảnh,
văn bản; Thread lấy dữ liệu từ mạng…

Word: Thread hiện thị đồ họa; Thread đọc
sự nhấn phím của NSD; Thread kiểm tra
chính tả…
8
Java Simplified / Session 22 / 9 of 45

Thread cũng đóng một vai trò quan trọng
trong hệ thống lời gọi thủ tục xa (RPC).

Khi một trình phục vụ nhận một thông điệp,

nó phục vụ thông điệp dùng một thread riêng.
Điều này cho phép phục vụ nhiều yêu cầu
đồng hành.

Ứng dụng mạng trong lập trình mạng
Applications of threads
9
Java Simplified / Session 22 / 10 of 45

Sự đáp ứng:

đa luồng một ứng dụng giao tiếp cho phép một chương
trình tiếp tục chạy thậm chí nếu một phần của nó bị khóa
(wait) hay đang thực hiện một thao tác dài,

do đó gia tăng sự đáp ứng đối với người dùng

Chia sẻ tài nguyên:

Mặc định, các luồng chia sẻ bộ nhớ và các tài nguyên
của các quá trình mà chúng thuộc về.

Thuận lợi của việc chia sẻ là nó cho phép một ứng dụng
có nhiều hoạt động của các luồng khác nhau nằm trong
cùng không gian địa chỉ.
Benefits of Multithreading
10
Java Simplified / Session 22 / 11 of 45

Kinh tế:


cấp phát bộ nhớ và các tài nguyên cho việc tạo các quá
trình là rất đắt.

Vì các luồng chia sẻ tài nguyên của quá trình mà chúng
thuộc về nên nó kinh tế hơn để tạo và chuyển ngữ cảnh
giữa các luồng.

Sử dụng kiến trúc đa xử lý:

các lợi điểm của đa luồng có thể phát huy trong kiến trúc
đa xử lý, ở đó mỗi luồng thực thi song song trên một bộ
xử lý khác nhau.

Một quá trình đơn luồng chỉ có thể chạy trên một CPU.
Đa luồng trên một máy nhiều CPU gia tăng tính đồng
hành.
Benefits of Multithreading
11
Java Simplified / Session 22 / 12 of 45

Multithreading requires less overhead than
multitasking.

In multitasking, các tiến trình chạy trên các
không gian địa chỉ của chúng và khác nhau giữa
các tiến trình

đòi hỏi nhiều tài nguyên của hệ thống (cả ram và CPU)


In multithreading các tác vụ có thể chia sẻ cùng
không gian địa chỉ

Multithreading cho phép viết các chương trình có
hiệu quả cao với sự tận dụng CPU là tối đa bằng
cách duy trì thời gian trễ là tối thiểu.
Multithreading vs. multitasking
12
Java Simplified / Session 22 / 13 of 45

Thread nhân:

Được hỗ trợ trực tiếp bởi hệ điều hành.

Nhân thực hiện việc tạo luồng, lập thời biểu, và
quản lý không gian nhân.

Thread người dùng:

Được hỗ trợ dưới nhân và được cài đặt bởi thư
viện luồng tại cấp người dùng.

Việc tạo luồng và lập thời biểu được thực hiện
trong không gian người dùng mà không cần sự
can thiệp của nhân.
Hai loại Thread
13
Java Simplified / Session 22 / 14 of 45

Java là một trong số nhỏ ngôn ngữ cung cấp sự hỗ trợ tại

cấp ngôn ngữ cho việc tạo và quản lý luồng.

Tuy nhiên, vì các luồng được quản lý bởi máy ảo Java
(JVM), không bởi một thư viện cấp người dùng hay nhân.

Một chương trình Java có ít nhất 1 Thread, nó được gọi
thực hiện khi phương thức main chạy (như một luồng đơn
trong máy ảo Java)
-> Main Thread.

Ngoài ra, Java cung cấp các lệnh cho phép người phát triển tạo và
thao tác các luồng điều khiển bổ sung trong chương trình
Thread in Java
14
Java Simplified / Session 22 / 15 of 45

Every Thread has a state and a Thread can be in
one of these six states.

new. A state in which a thread has not been started.

runnable. A state in which a thread is executing.

blocked. A state in which a thread is waiting for a lock to
access an object.

waiting. A state in which a thread is waiting indefinitely for
another thread to perform an action.

timed__waiting. A state in which a thread is waiting for up

to a specified period of time for another thread to perform
an action.

terminated. A state in which a thread has exited.
Six states of Thread
15
Java Simplified / Session 22 / 16 of 45

Tạo tuyến đoạn mới:
Thread newThread = new
Thread(“threadName“);

Kích hoạt đoạn tuyến khởi động
newThread.start();

Khi tuyến đoạn ở trạng thái New thì chỉ có
phương thức start() được gọi, nếu không sẽ
có ngoại lệ IllegalThreadStateException
được đưa ra
The New Thread State
16
Java Simplified / Session 22 / 17 of 45

Một tuyến đoạn ở trạng thái runnable mỗi khi
phương thức start() của nó được kích hoạt.

Điều này nghĩa là mã lệnh trong phương thức
run() có thể được xử lý bất kỳ khi nào giành
được quyền xử lý từ hệ điều hành.
The Runnable thread state

17
Java Simplified / Session 22 / 18 of 45
Một tuyến đoạn ở not runnable state (blocked) khi:

Phương thức sleep() của tuyến đoạn được gọi:
Tuyến đoạn sẽ tạm dừng sau một số ms xác định.

Tuyến đoạn gọi phương thức wait() của một đối
tượng: Tuyến đoạn sẽ not runnable cho tới khi
phương thức notify() hoặc notifyAll()
được gọi từ một tuyến đoạn khác.

Tuyến đoạn bị blocked() bởi một thao tác
vào/ra. Tuyến đoạn sẽ not runnable cho tới khi
hoạt động vào ra hoàn thành.
The not Runnable Thread State
18
Java Simplified / Session 22 / 19 of 45

A thread có thể dead or alive.

Dead khi phương thức run() hoàn thành việc xử lý.

Dead khi gán giá trị null cho đối tượng

Phương thức isAlive(): xác định một thread còn
sống hay ko

Một thread ở trạng thái dead không thể được
khởi động lại.

The Dead Thread State
19
Java Simplified / Session 22 / 20 of 45
Different thread states
New Thread
(BORN)
READY
RUNNING
DEAD
SLEEPING
WAITING BLOCKED
20
Java Simplified / Session 22 / 21 of 45
Main Thread
21

Mỗi khi chạy một ứng dụng trong java thì đã có
một thread.

Đây là thread chính, nó thực thi các dòng lệnh
trong method : public static void main . Đây là một
điểm nhập bắt buộc cho mọi ứng dụng độc lập.
main thread : Tuyến đoạn đầu tiên thực hiện trong
ứng dụng đa tuyến đoạn, được tạo ra tự động
Java Simplified / Session 22 / 22 of 45
Main Thread
22

currentThread(): phương thức được dùng để truy
nhập vào main thread.

public static void main(String args[]) {
Thread t= Thread.currentThread();
System.out.println(" The current thread: " + t);
t.setName("MainThread");
System.out.println(“The current thread after name change:”+ t);

}
Java Simplified / Session 22 / 23 of 45

Có thể 2 cách:

Extend the java.lang.Thread class
override the run() method of the Thread class.

Implement the java.lang.Runnable interface
define the run() method.
Create Thread
23
Java Simplified / Session 22 / 24 of 45

Lớp java.lang.Thread cung cấp các phương thức
quản lý, kiểm soát độ ưu tiên của tuyến đoạn :

khởi động (start()),

tạm dừng (suspend()),

phục hồi (resume()) và

dừng hẳn (stop()).


Để sử dụng lớp Thread là thừa kế lớp này và nạp
chồng phương thức run():

Nó được gọi khi khởi động tuyến đoạn lần đầu.

Một tuyến đoạn có thể thực hiện một số tác vụ hữu ích
ở hậu trường
Dùng Thread class
24
Java Simplified / Session 22 / 25 of 45
class Th_ex extends Thread
{
public void run()
{ }
public static void main(String args[]){
Th_ex T = new Th_ex();
//Kích hoạt đoạn tuyến khởi động
T.start();
}
}
Dùng Thread class -
25

×