1. Trang chủ
  2. » Luận Văn - Báo Cáo

chuong 4 lap trinh multithread trong java

43 0 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Nội dung

Lập trình đa luồng Multi Threaded Programming cùng một không gian bộ nhớ, và các luồng có thể cho phép chia sẻ các đối tượng dữ liệu để cùng xử lý... Giới thiệu HĐH đa nhiệm  Hệ điều hà

Trang 1

LẬP TRÌNH

ĐA LUỒNG (MULTITHREAD) TRONG JAVA

Trang 2

Nội dung

Trang 3

Lập trình đơn luồng

(Single Threaded Programming)

xử lý tuần tự

lỗi phát sinh ở đâu

chưa thực thi xong thì các câu lệnh khác không được chạy  không hợp lý

Trang 4

Lập trình đa luồng

(Multi Threaded Programming)

cùng một không gian bộ nhớ, và các luồng có thể cho phép chia sẻ các đối tượng dữ liệu để cùng xử lý

Trang 5

Giới thiệu HĐH đa nhiệm

Hệ điều hành đa nhiệm cổ điển:

 Process là đoạn chương trình độc lập đã được nạp vào bộ nhớ  Mỗi process thi hành một ứng dụng riêng

 Mỗi process có một không gian địa chỉ và một không gian trạng thái riêng

 Các process liên lạc với nhau thông qua cơ chế điều phối của HĐH

Trang 6

Hệ điều hành đa nhiệm hiện đại, hỗ trợ thread:

 Thread một đoạn các câu lệnh được thi hành

 Mỗi process có một không gian địa chỉ và nhiều thread

Trang 7

 Luồng của một quá trình có thể chia sẻ nhau không gian địa chỉ : Biến toàn cục, tập tin, chương trình con,

Trang 8

Main Thread

Các thread có thể chuyển đổi dữ liệu với nhau

Chương trình Multithread

Trang 9

Ứng dụng Multithread

9

Printing Thread

Editing Thread

Trang 10

Lập trình multithread với Java

public class Thread extends Object { … }

public interface Runnable {

public void run(); // work  thread }

+isAlive()+join()+interrupt()+start()+stop()

Trang 11

Lớp java.lang.Thread

của lớp Thread

 public static synchronized void start() :

Trang 12

 public void run():

 public void stop() : kết thúc một thread

Lớp java.lang.Thread

Trang 13

Tạo và quản lý thread

được thực thi Luồng này được tạo ra một cách tự động tại đây:

luồng chính ngừng thực thi, chương trình bị chấm dứt

Trang 14

Tạo thread sử dụng lớp Thread

class MyThread extends Thread

Trang 15

Ví dụ

public void run() {

System.out.println(" this thread is running "); }

} // end class MyThread

Trang 16

Ví dụ

class ThreadEx1 { // a program that utilizes the thread

public static void main(String [] args ) {

MyThread t = new MyThread();

t.start();

} // end main()

} // end class ThreadEx1

Trang 17

Tạo thread sử dụng Runnable

class MyThread implements Runnable {

public void run() {

} }

Trang 18

Tạo thread sử dụng Runnable

MyThread myObject = new MyThread();

Thread thr1 = new Thread(myObject);

thr1.start();

Trang 19

class MyThread implements Runnable { public void run() {

System.out.println(" this thread is running "); }

} // end class MyThread

Ví dụ

Trang 20

class ThreadEx2 {

public static void main(String [] args ) {

Thread t = new Thread(new MyThread());

t.start();

} // end main()

} // end class ThreadEx2

Ví dụ

Trang 21

Threads – Thread States

Trang 22

Vòng đời của thread

time slice

notify, notifyAll, IO complete, sleep expired,

join complete

Trang 24

Viết chương trình thi hành song song 3 thread

class A extends Thread { public void run() {

Ví dụ

Trang 25

class B extends Thread { public void run() {

Ví dụ

Trang 26

class C extends Thread { public void run() {

Ví dụ

Trang 27

class ThreadTest {

public static void main(String args[]) { new A().start();

new B().start(); new C().start(); }

}

Ví dụ

Trang 28

Chạy lần thứ 1

java ThreadTest

From ThreadA: i= 1 From ThreadA: i= 2 From ThreadA: i= 3 From ThreadA: i= 4 From ThreadA: i= 5 Exit from A

From ThreadC: k= 1 From ThreadC: k= 2 From ThreadC: k= 3 From ThreadC: k= 4 From ThreadC: k= 5 Exit from C

From ThreadB: j= 1 From ThreadB: j= 2 From ThreadB: j= 3 From ThreadB: j= 4 From ThreadB: j= 5 Exit from B

Trang 29

java ThreadTest

From ThreadA: i= 1 From ThreadA: i= 2 From ThreadA: i= 3 From ThreadA: i= 4 From ThreadA: i= 5 From ThreadC: k= 1 From ThreadC: k= 2 From ThreadC: k= 3 From ThreadC: k= 4 From ThreadC: k= 5 Exit from C

From ThreadB: j= 1 From ThreadB: j= 2 From ThreadB: j= 3 From ThreadB: j= 4 From ThreadB: j= 5 Exit from B

Exit from A

Chạy lần thứ 2

Trang 30

Độ ưu tiên

của thread Khi thread được tạo ra có độ ưu tiên mặc định (NORM_PRIORITY)

Trang 34

class ThreadPriority {

public static void main(String args[]) { A threadA=new A();

B threadB=new B(); C threadC=new C();

threadC.setPriority(Thread.MAX_PRIORITY); threadB.setPriority(threadA.getPriority()+1); threadA.setPriority(Thread.MIN_PRIORITY); System.out.println("Started Thread A");

threadA.start();

System.out.println("Started Thread B"); threadB.start();

System.out.println("Started Thread C"); threadC.start();

System.out.println("End of main thread"); }

}

Ví dụ về thread priority

Trang 35

Threads – Scheduling

Trang 36

thi hành một khoảng thời gian ngẫu nhiên

Trang 37

1 // ThreadTester.java

2 // Show multiple threads printing at different intervals

3

4 public class ThreadTester {

5 public static void main( String args[] )

6 {

7 PrintThread thread1, thread2, thread3, thread4;

8

9 thread1 = new PrintThread( "thread1" );

10 thread2 = new PrintThread( "thread2" );

11 thread3 = new PrintThread( "thread3" );

12 thread4 = new PrintThread( "thread4" );

25 class PrintThread extends Thread {

26 private int sleepTime;

27

28 // PrintThread constructor assigns name to thread

29 // by calling Thread constructor

main kết thúc khi thread cuối cùng kết thúc

Trang 38

30 public PrintThread( String name )

31 {

32 super( name );

33

34 // sleep between 0 and 5 seconds

35 sleepTime = (int) ( Math.random() * 5000 );

41 // execute the thread

42 public void run()

53 // print thread name

54 System.err.println( getName() + " done sleeping" );

55 }

56 }

Gọi constructor lớp cha

Sleep có thể ném ra biệt lệ Công việc của thread

Trang 40

Đồng bộ hóa

class Parentheses { void display(String s) { System.out.print("(" + s); try {

Thread.sleep(1000);

} catch (InterruptedException e) { System.out.println("Interrupted"); }

System.out.println(")"); }

}

Trang 41

Đồng bộ hóa

class MyThread implements Runnable { String str;

Parentheses parentTheses; Thread t;

public MyThread(Parentheses p, String s) { parentTheses = p;

str = s;

t = new Thread(this); t.start();

}

public void run() {

parentTheses.display(str); }

}

Trang 42

name1.t.join(); // tạm dừng cho đến khi thread kết thúc name2.t.join();

} catch (InterruptedException e) { System.out.println("Interrupted"); }

} }

Trang 43

}

Ngày đăng: 16/06/2024, 16:09