Giáo trình lập trình Java Chương 8: ĐA LUỒNG (Multithreading)

Ngày đăng 10/06/2023
73 Lượt xem

Mục tiêu:

          Sau khi kết thúc chương này, bạn có thể:

  • Định nghĩa một luồng (thread)
  • Mô tả đa luồng
  • Tạo và quản lý luồng
  • Hiểu được vòng đời của luồng
  • Mô tả một luồng hiểm (daemon thread)
  • Giải thích thiết lập các luồng ưu tiên như thế nào
  • Giải thích được sự cần thiết của sự đồng bộ
  • Hiểu được cách áp dụng vào các từ khoá đồng bộ như thế nào (how to apply synchronized keywords)
  • Liệt kê những điểm yếu của sự đồng bộ
  • Giải thích vai trò của các phương thức wait() (đợi), notify() (thông báo) và notifyAll().
  • Mô tả một điều kiện bế tắc (deadlock condition)
    1. Giới thiệu

          Một luồng là một thuộc tính duy nhất của Java. Nó là đơn vị nhỏ nhất của đoạn mã có thể thi hành được mà thực hiện một công việc riêng biệt. Ngôn ngữ Java và máy ảo Java cả hai là các hệ thống đươc phân luồng

    1. Đa luồng

          Java hổ trợ đa luồng, mà có khả năng làm việc với nhiều luồng. Một ứng dụng có thể bao hàm nhiều luồng. Mỗi luồng được đăng ký một công việc riêng biệt, mà chúng được thực thi đồng thời với các luồng khác.

          Đa luồng giữ thời gian nhàn rỗi của hệ thống thành nhỏ nhất. Điều này cho phép bạn 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. Mỗi phần của chương trình được gọi một luồng, mỗi luồng định nghĩa một đường dẫn khác nhau của sự thực hiện. Đây là một thiết kế chuyên dùng của sự đa nhiệm.

          Trong sự đa nhiệm, nhiều chương chương trình chạy đồng thời, mỗi chương trình có ít nhất một luồng trong nó. Một vi xử lý thực thi tất cả các chương trình. Cho dù nó có thể xuất hiện mà các chương trình đã được thực thi đồng thời, trên thực tế bộ vi xử lý nhảy qua lại giữa các tiến trình.

    1. Tạo và quản lý luồng

          Khi các chương trình Java được thực thi, luồng chính luôn luôn đang được thực hiện. Đây là 2 nguyên nhân quan trọng đối với luồng chính:

  • Các luồng con sẽ được tạo ra từ nó.
  • Nó là luồng cuối cùng kết thúc việc thực hiện. Trong chốc lát luồng chính ngừng thực thi, chương trình bị chấm dứt.

          Cho dù luồng chính được tạo ra một cách tự động với chương trình thực thi, nó có thể được điều khiển thông qua một luồng đối tượng.

          Các luồng có thể được tạo ra từ hai con đường:

  • Trình bày lớp như là một lớp con của lớp luồng, nơi mà phương thức run() của lớp luồng cần được ghi đè. Lấy ví dụ:

                   Class Mydemo extends Thread

                   {

                             //Class definition

                             public void run()

                             {

                                      //thực thi

                             }

                   }

  • Trình bày một lớp mà lớp này thực hiện lớp Runnable. Rồi thì định nghĩa phương thức run().

                   Class Mydemo implements Runnable

                   {

                             //Class definition

                             public void run()

                             {

                                      //thực thi

                             }

                   }

Chương trình 8.1 sẽ chỉ ra sự điều khiển luồng chính như thế nào

Chương trình 8.1

import java.io.*;

public class Mythread extends Thread{

/**

 * Mythread constructor comment.

 */

          public static void main(String args[]){

                   Thread t = Thread.currentThread();

                   System.out.println("The current Thread is :" + t);

                   t.setName("MyJavaThread");

                   System.out.println("The thread is now named: " + t);

                   try{

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

                                      System.out.println(i);

                                      Thread.sleep(1500);

                             }

                   }catch(InterruptedException e){

                             System.out.println("Main thread interupted");

                   }

          }

}

Hình sau đây sẽ chỉ ra kết quả xuất ra màn hình của chương trình trên


Chia sẻ: