Slide 11 1 multithread

45 478 0
Slide 11 1 multithread

Đ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

LECTURE 11 MULTI-THREADING NỘI DUNG • Đa nhiệm đa luồng • Tạo lập sử dụng luồng – Kế thừa lớp Thread – Cài đặt giao tiếp Runnable • Đồng hố luồng • Luồng ma • Nhóm luồng Đa nhiệm (multitasking) • Đa nhiệm kỹ thuật cho phép nhiều công việc thực lúc máy tính • Nếu có nhiều CPU, cơng việc thực song song CPU Trong trường hợp nhiều công việc chia sẻ CPU, phần công việc CPU thực xen kẽ Đa nhiệm (multitasking) • Hai kỹ thuật đa nhiệm bản: – Đa tiến trình (Process-based multitasking): Nhiều chương trình chạy đồng thời Mỗi chương trình có vùng liệu độc lập – Đa luồng (Thread-based multitasking): Một chương trình có nhiều luồng chạy đồng thời Các luồng dùng chung vùng liệu chương trình Luồng đa luồng • Luồng mạch thi hành độc lập tác vụ chương trình • Một chương trình có nhiều luồng thực lúc gọi đa luồng Tạo luồng • Luồng Java đối tượng • Có hai cách để tạo luồng – Thừa kế từ lớp java.lang.Thread – Cài đặt giao tiếp java.lang.Runnable Tạo luồng - Cách 1: Kế thừa từ Thread Tạo luồng - Cách 1: Kế thừa từ Thread • Khi luồng tạo ra, cần gọi start() để đặt luồng trạng thái sẵn sàng Tiếp theo hệ thống thực thi câu lệnh run() luồng • Luồng kết thúc làm hết lệnh run() stop() gọi Tạo luồng - Cách 1: Kế thừa từ Thread Tạo luồng - Cách 2: Cài đặt Runnable 10 Ví dụ P - C: Khơng đồng public class SharedBufferTest1{ public static void main( String [] args ){ //create shared object used by threads Buffer sharedBuffer = new Buffer(); //create producer and consumer objects Producer producer=new Producer(sharedBuffer); Consumer consumer=new Consumer(sharedBuffer); producer.start(); // start producer thread consumer.start(); // start consumer thread } } 31 Kết khơng đồng 32 Ví dụ P - C: Có đồng class Buffer{ // Thiết kế lại lớp Buffer private int buffer = -1; private boolean writable = true; public synchronized void set( int value ){ while (!writable){ try{ wait(); }catch (InterruptedException e){ e.printStackTrace(); } } buffer = value; writable = false; notify();//thong bao cho cac luong khac da xong viec } 33 Ví dụ P - C: Có đồng public synchronized int get(){ while( writable ){ try{ wait(); } catch (InterruptedException e){ e.printStackTrace(); } } writable = true; notify(); return buffer; } } 34 Kết có đồng 35 Tạo luồng từ giao tiếp Runnable • Một lớp trở thành luồng cài đặt giao tiếp Runnable (giao tiếp có phương thức run() nhất) • Ví dụ: Tạo applet có bóng chạy 36 Tạo luồng từ giao tiếp Runnable import java.awt.*; import java.applet.*; public class BallFlyingextendsApplet implements Runnable { Thread animThread = null; int ballX= 0, ballY=50; int dx=1, dy=2; boolean stopRun = false; public void start() { //applet starts if (animThread == null){ animThread= new Thread(this); animThread.start(); } } 37 Tạo luồng từ giao tiếp Runnable public void stop(){ // applet stops stopRun = true; } publicvoid run(){ this.setBackground(Color.CYAN); while (! stopRun){ moveBall(); delay(5); } } private void delay(intmiliSeconds){ try{ Thread.sleep(miliSeconds); }catch (Exception e){ System.out.println("Sleeperror !"); } } 38 Tạo luồng từ giao tiếp Runnable private void moveBall(){ ballX += dx; ballY += dy; if (ballY> getSize().height -30) if (ballX> getSize().width -30) if (ballY< 0) dy =- dy; if (ballX< 0) dx =- dx; repaint(); } publicvoid paint(Graphicsg){ g.fillOval(ballX,ballY, 30, 30); } } dy =- dy; dx =- dx; 39 Luồng ma (daemon thread) • Luồng ma thường luồng hỗ trợ môi trường thực thi luồng khác Ví dụ: garbage collector Java luồng ma • Chương trình kết thúc tất luồng luồng ma kết thúc • Các phương thức với luồng ma: – void setDaemon(boolean isDaemon); // đặt luồng trở thành luồng ma – boolean isDaemon(); // kiểm tra luồng có phải luồng ma khơng 40 Nhóm luồng (thread group) • Các luồng đưa vào nhóm thơng qua lớp ThreadGroup Ví dụ: nhóm luồng tìm kiếm liệu tập liệu khác • Một nhóm luồng xử lý luồng nhóm, ví dụ: ngắt tất luồng • Có thể tạo nhóm luồng nhóm nhóm luồng khác • Nhóm luồng đặc biệt: system, main 41 Lớp Timer • Hai lớp liên quan tới xử lý công việc theo thời gian: – javax.swing.Timer – java.util.Timer • Lớp java.swing.Timer – Đơn giản, dễ dùng GUI • Lớp java.util.Timer – Nhiều tính java.swing.Timer 42 Ví dụ: Đếm ngược import java.awt.*; import java.awt.event.*; import java.applet.Applet; public class CountDown extends Applet implements ActionListener{ private TextField timeField; private Button startButton; private Button stopButton; private javax.swing.Timer timer; private int count; public void init(){ timeField = new TextField(6); 43 Ví dụ: Đếm ngược timeField.setFont(new Font("sansserif", Font.PLAIN, 18)); startButton = new Button("Start"); stopButton = new Button("Stop"); add(timeField); add(startButton); add(stopButton); startButton.addActionListener(this); stopButton.addActionListener(this); timer = new javax.swing.Timer(10, this); count = 0; } // end init() 44 Ví dụ: Đếm ngược } public void actionPerformed(ActionEvent e){ if (e.getSource() == startButton) timer.start(); else if (e.getSource() == stopButton) timer.stop(); else { count++; int hsecond = count%100; int totalSecond = (count/100); int h = totalSecond/3600; int secondLeft = totalSecond%3600; int m = secondLeft/60; int s = secondLeft%60; timeField.setText("“ + h + ":" + m + ":" + s + ":" + hsecond); } } 45 ... luồng - Cách 1: Kế thừa từ Thread Tạo luồng - Cách 2: Cài đặt Runnable 10 Độ ưu tiên • Các luồng Java có độ ưu tiên từThread.MIN_PRIORITY (giá trị 1) đến Thread.MAX_PRIORITY (giá trị 10 ) • Luồng... tiên mặc định luồng Thread.NORM_PRIORITY (giá trị 5) • Một luồng thừa kế độ ưu tiên từ luồng tạo 11 Bộ lập lịch • Bộ lập lịch (scheduler) Java quản lý luồng theo chế phân chia thời gian (timeslicing)... getName() + " done sleeping" ); } 16 Ví dụ đa luồng (tt) public class ThreadTest{ public static void main( String [ ] args ){ PrintThread thread1 = new PrintThread( "thread1" ); PrintThread thread2 =

Ngày đăng: 11/06/2014, 09:00

Từ khóa liên quan

Mục lục

  • Slide 1

  • NỘI DUNG

  • Đa nhiệm (multitasking)

  • Slide 4

  • Luồng và đa luồng

  • Tạo luồng

  • Tạo luồng - Cách 1: Kế thừa từ Thread

  • Slide 8

  • Slide 9

  • Tạo luồng - Cách 2: Cài đặt Runnable

  • Độ ưu tiên

  • Bộ lập lịch

  • Slide 13

  • Ví dụ về đa luồng

  • Ví dụ về đa luồng (tt)

  • Slide 16

  • Slide 17

  • Slide 18

  • Một số phương thức của Thread

  • Slide 20

Tài liệu cùng người dùng

Tài liệu liên quan