1. Trang chủ
  2. » Công Nghệ Thông Tin

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

80 388 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 80
Dung lượng 496,18 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

 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..  Hệ điều hành duy trì một hàng đợi các tuyến đoạn và phân bổ th

Trang 1

Chapter 6 Threads in Java

1

Trang 2

Explain how to set thread priorities

Describe a daemon thread

Objectives

2

Trang 3

Multitasking:

trên một CPU (đơn nhân)

chương này sang chương trình khác (ms).

Process

các tài nguyên khác -> 1 process.

Trang 4

 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

Trang 5

 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ớ

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

MultiThread

5

Trang 6

Single vs Multi-Threaded

6

Trang 7

Step 1 Step 2 … Step n

Single vs Multi-Threaded

7

• A process that is made of one thread is known as

• A process that creates two or more threads is

called a multithreaded process

Trang 8

Applications of Multithread

văn bản; Thread lấy dữ liệu từ mạng…

sự nhấn phím của NSD; Thread kiểm tra chính tả…

8

Trang 9

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

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.

Applications of threads

9

Trang 10

 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

 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

Trang 11

 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

Trang 12

 Multithreading requires less overhead than multitasking.

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)

không gian địa chỉ

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

Trang 13

 Thread nhân:

quản lý không gian nhân

viện luồng tại cấp người dùng

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

Trang 14

 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)

Trang 15

 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

Trang 16

 Tạo tuyến đoạn mới:

Thread newThread = new Thread(“threadName“);

newThread.start();

có ngoại lệ IllegalThreadStateException

được đưa ra

The New Thread State

16

Trang 17

 Một tuyến đoạn ở trạng thái runnable mỗi khi

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

Trang 18

Một tuyến đoạn ở not runnable state (blocked) khi:

Tuyến đoạn sẽ tạm dừng sau một số ms xác định

tượng: Tuyến đoạn sẽ not runnable cho tới khi

được gọi từ một tuyến đoạn khá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

Trang 19

 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

Trang 20

Different thread states

New Thread (BORN)

Trang 21

Main Thread

21

một thread

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

Trang 22

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);

… }

Trang 23

 Có thể 2 cách:

override the run() method of the Thread class.

define the run() method.

Create Thread

23

Trang 24

 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 :

 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

Trang 25

class Th_ex extends Thread {

{ }

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

Trang 26

public class HelloThread extends Thread {

{ System.out.println("Hello from athread");

} public static void main(String args[])

{ (new HelloThread()).start() ; }

}

Thread class, ex

26

Trang 27

void start() : Gọi một thread khởi động

final boolean isAlive() : kiểm tra thread

còn chạy không.

final String getName() : trả về tên của

thread.

final void setName(String name) : thiết

đặt tên cho thread

Some methods of thread class

27

Trang 28

} catch(InterruptedException e) { }

} }28

Trang 29

class MyThread extends Thread {

public static void main(String args[]) {

MyThread Objex = new MyThread();

//Add more threads or:

Objex.create() ; System.out.println("This is the main thread");

} public void create()

{ Thread Objth1 = new Thread(this);

Thread Objth2 = new Thread(this);

Thread Objth3 = new Thread(this);

Objth1.start(); Objth2.start(); Objth3.start();

} public void run() { while (true) { try { System.out.println("This is the child thread");

Thread.sleep(1000);

} catch(InterruptedException e) { }

} } }

Ex MultiThread

29

Trang 30

 Mỗi Thread tạo ra đều thực thi các tác vụ giống nhau (theo run())

nhau?

riêng cho mỗi thread.

Ex MultiThread

30

Trang 31

class TichTac extends Thread {

String word ;

int delay ;

TichTac(String s, int d)

{ word =s;

{ System.out print( "Stop ct" );

} }

{ new TichTac( "Tich" ,330).start();

new TichTac( "Tac" ,1000).start();

new TichTac( “tac" ,500).start();

ex

31

Trang 32

public class Thread_ex extends Thread{

String name ; Thread_ex (String name){

this name = name;

}

public static void main(String args[]) {

Thread_ex Objex1 = new Thread_ex( "Thr1" );

Thread_ex Objex2 = new Thread_ex( "Thr2" );

Thread_ex Objex3 = new Thread_ex( "Thr3" );

Trang 33

class arrThread extends Thread {

… public void run(){…}

}

//New Thread

Trang 34

private static class Tinh extends Thread {

}

System.out println( "Thread " + id + " counted " +

} }

MultiThread using array ex,

Tinh[] worker = new Tinh[numThreads];

for ( int i = 0; i < numThreads; i++) {

worker[i] = new Tinh( i );

worker[i].start();

}

Trang 35

 Interface Runnable

chạy như các tuyến đoạn

tương tranh có thể sử dụng chung mã và thao tác trên cùng dữ liệu

Dùng Interface Runnable

35

Trang 36

class C2 implements Runnable

{ public C2()

{Thread t = new Thread(this);}

public void run(){ }

}

Dùng Interface Runnable

36

Trang 37

public class HelloRunnable implements Runnable {

public void run()

{ System.out.println("Hello from a thread!"); }

public static void main(String args[])

{

}}

Runnable, ex

37

Trang 38

class Run_ex {

public static void main(String[] args) throws

InterruptedException

Runnable runA = new Runnable() {

public void run() {

//statements };

Thread ta = new Thread(runA, "threadA" );

ta.start();

}

Interface Runnable

38

Trang 39

public class ex { public static void main(String[] args) throws InterruptedException {

Runnable a = new Runnable (){

@Override

public void run() {

System.out println( "AAAAA" );

} };

Runnable b = new Runnable (){

@Override

public void run() {

System.out println( "BBBBB" );

} };

Runnable c = new Runnable (){

@Override

public void run() {

System.out println( "CCCCCC" );

} };

//Tao 3 Threads ta, tb,tc Thread ta = new Thread(a, "threadA" );

Ex, multiThread

39

Trang 40

final void join() throws

làm cho thread gọi join() phải ngưng hoạt động và chờ trong một khoảng thời gian, hoặc đến khi thread này kết thúc thì mới tiếp tục hoạt động

Mean: another thread calls thrd.join(), that other thread will go

to sleep until thrd terminates If thrd is already dead when thrd.join() is called, then it simply has no e ect ff

Some methods of thread class

40

Trang 41

final void join() throws InterruptedException

Ex:

System.out.print("Running the thread ");

thrd.start();

while (thrd.isAlive()) {try { thrd.join(2000); System.out.print(".");

} catch (InterruptedException e) { } }

System.out.println(" Done!");

Some methods of thread class

41

Trang 42

Some methods of thread class

42

Trang 43

static void yield() : giành lấy quyền thực thi

của tuyến đoạn hiện hành cho một trong các tuyến đoạn khác (sleep)

static int activeCount() : trả về số thread

đang active.

static void sleep() : đưa tiến đoạn hiện

hành vào trạng thái nghỉ tối thiểu là ms (milis)

Some methods of thread class

43

Trang 44

 Hiện thị giá trị number giảm dần: 100->1 (extend: Hình ảnh đồng hồ đếm ngược)

MultiThread trong Applet - ex

44

Trang 45

Consider a simple class called Counter class Counter {

private int c = 0;

public void increment() { c++;

} public void decrement() { c ;

} public int value() { return c;

} }

Synchronization

45

Trang 46

 The single expression c++ can be

 Retrieve the current value of c.

 Increment the retrieved value by 1.

 Store the incremented value back in c.

 Ex, Thread A invokes increment at about the same time Thread B invokes decrement If the initial value of c is 0,

 Thread A: Retrieve c.

 Thread B: Retrieve c.

 Thread A: Increment retrieved value; result is 1.

 Thread B: Decrement retrieved value; result is -1.

 Thread A: Store result in c; c is now 1.

 Thread B: Store result in c; c is now -1.

Synchronization

46

Trang 47

 Khi làm việc với nhiều Thread, có thể có một số Thread muốn sử dụng cùng tài nguyên tại cùng 1 time.

 Khi hai tuyến đoạn cần sử dụng cùng một đối tượng, có

một khả năng có các thao tác đan xen nhau làm phá hỏng

dữ liệu => Race condition ex,

 Tại một time t chỉ có 1 thread sử dụng tài nguyên.

 Monitor: Chỉ có 1 Thread có được monitor tại 1 time Các

Thread khác muốn có được monitor phải chờ đợi

Synchronization

47

Trang 48

 Sử dụng phương thức chiếm dụng đối tượng:

 Nếu một đối tượng bị phong tỏa (used) bởi một tuyến đoạn nào đó thì chỉ có tuyến đoạn đó mới được truy cập tới đối tượng.

 Nếu một tuyến đoạn kích hoạt một phương thức synchronized trên một đối tượng, đối tượng đó sẽ bị chiếm dụng bởi tuyến đoạn kích hoạt

 Khi đối tượng được giải phóng, một tuyến đoạn khác mới được kích hoạt synchronized trên cùng đối tượng

synchronized(Obj);

Note that constructors cannot be synchronized

Method synchronized()

48

Trang 49

Consider a simple class called Counter class Counter {

} }

Ex, TestUnsyn.java

49

Trang 50

 Lệnh synchronized cho phép đồng bộ hóa một đối tượng thay cho phương thức

synchronized

synchronized (expr) {

//this code will execute in one thread at//a time and someObject will be locked

}

Lệnh synchronized

50

Trang 51

synchronized (color) {

int myColorInt = color.getRGB();

//may be another thread invoke color.set()

String myColorName = color.getName(); }

}

Trang 52

 Cơ chế chiếm dụng đồng bộ hóa ngăn cho các tuyến đoạn chồng chéo nhau

 Các tuyến đoạn vẫn có thể trao đổi thông tin với nhau, sử dụng các phương thức:

wait() : cho phép một tuyến đoạn đợi cho tới khi một

điều kiện nào đó xảy ra

notify() : báo cho các tuyến đoạn biết sự kiện nào đó

Trang 53

public final void wait(long timeout) throws InterruptedException:

 Tuyến đoạn hiện thời chờ cho tới khi được cảnh báo hoặc một khoảng thời gian timeout nhất định

 Nếu timeout bằng 0 thì phương thức sẽ chỉ chờ cho tới khi có

cảnh báo về sự kiện

public final void notify()

 Cảnh báo ít nhất một tuyến đoạn đang chờ một điều kiện nào đó thay đổi trước khi có thể gọi phương thức wait nào đó

public final void notifyAll()

 Cảnh báo tất cả các tuyến đoạn đang chờ một điều kiện thay đổi

 Trong số các tuyến đoạn đã được cảnh báo, tuyến đoạn nào có

độ ưu tiên cao nhất thì sẽ chạy trước tiên.

Methods: wait , notify

53

Trang 54

54

Trang 55

public class Wait_Noti extends Thread {

public static void main(String args[]) throws

Exception {

Thread notiThread = new Wait_Noti();

notiThread.start(); // cont to run() // wait thread an event execute

synchronized (notiThread)

{ notiThread.wait(7000);

} // wait() is done

System.out.println ("The wait is over");

}

Ex: wait , notify

55

public void run() {

System.out.println (" Click enter to stop

}

}

Trang 56

 Bài toán Producer – Consumer.

 set(i)

Ex: Synchonized with wait, notify

56

Trang 57

public class Synch_ex { public class Product { private int view = 0;

public boolean isRemainingview;

public int get() {

//print onto screen

System.out.println("\tConsumer get " + this.view);

return view; } public void set(int piview) { this.view = piview;

System.out.println(“Producer set" + this.view);

} } //end class Product

public class Producer extends Thread { private Product sp;

Ex, Non Synchnozied

57

Trang 58

public class Consumer extends Thread { private Product sp;

public static void main(String[] args) {

Synch_ex t = new Synch_ex ();

Product s = t.new Product();

//2 thread cung dung chung doi tuong s thuoc class Product

Producer p = t.new Producer(s);

Cosumer c = t.new Consumer(s);

Trang 59

public synchronized int get() { while(isRemainingContents == false) { try {

wait();

} catch (InterruptedException e) {

} }

public synchronized void set(int piview ) {

while(isRemainingContents == true) { try {

wait();

} catch (InterruptedException e) {

} }

59

Trang 60

 Java gán cho mỗi tuyến đoạn một độ ưu tiên để xác định cách tuyến đoạn đó được xử lý như thế nào so với các tuyến đoạn khác

 Mỗi thread mới thừa kế quyền ưu tiên mà thread đã tạo ra nó.

 A thread with a greater priority value will be run in preference to a thread with a smaller priority

 Hằng số:

 public static final int MIN_PRIORITY = 1;

 public static final int NORM_PRIORITY = 5;

 public static final int MAX_PRIORITY = 10;

Thread PRIORITY

60

Ngày đăng: 12/04/2015, 03:08

TỪ KHÓA LIÊN QUAN

w