Lập trình đa luồng trong Java (Java Multi-threading)
Đăng vào 12/02/2018 Được đăng bởi GP Coder 47271 Lượt xem
Nội dung [Ẩn]
- 1 Giới thiệu
- 2 Vòng đời (các trạng thái) của một Thread trong java
- 3 Cách tạo luồng trong Java
- 4 Các phương thức của lớp Thread thường hay sử dụng
- 5 Một số thông tin liên quan đến luồng
- 6 Sử dụng phương thức sleep()
- 7 Sử dụng join() và join(long)
- 8 Xử lý ngoại lệ cho Thread
Giới thiệu
Thread là gì? Multi-thread là gì?
Thread (luồng) về cơ bản là một tiến trình con (sub-process). Một đơn vị xử lý nhỏ nhất của máy tính có thể thực hiện một công việc riêng biệt. Trong Java, các luồng được quản lý bởi máy ảo Java (JVM).
Multi-thread (đa luồng) là một tiến trình thực hiện nhiều luồng đồng thời. Một ứng dụng Java ngoài luồng chính có thể có các luồng khác thực thi đồng thời làm ứng dụng chạy nhanh và hiệu quả hơn.
VD: Trình duyệt web hay các chương trình chơi nhạc là 1 ví dụ điển hình về đa luồng.
+ Khi duyệt 1 trang web, có rất nhiều hình ảnh, CSS, javascript… được tải đồng thời bởi các luồng khác nhau.
+ Khi play nhạc, chúng ta vẫn có thể tương tác được với nút điều khiển như: Play, pause, next, back … vì luồng phát nhạc là luồng riêng biệt với luồng tiếp nhận tương tác của người dùng.
Đa nhiệm (multitasking)
Multitasking: Là khả năng chạy đồng thời một hoặc nhiều chương trình cùng một lúc trên một hệ điều hành. Hệ điều hành quản lý việc này và sắp xếp lịch phù hợp cho các chương trình đó. Ví dụ, trên hệ điều hành Windows chúng ta có làm việc đồng thời với các chương trình khác nhau như: Microsoft Word, Excel, Media Player, …
Chúng ta sử dụng đa nhiệm để tận dụng tính năng của CPU.
Đa nhiệm có thể đạt được bằng hai cách:
- Đa nhiệm dựa trên đơn tiến trình (Process) – Đa tiến trình (Multiprocessing).
- Mỗi tiến trình có địa chỉ riêng trong bộ nhớ, tức là mỗi tiến trình phân bổ vùng nhớ riêng biệt.
- Tiến trình là nặng.
- Sự giao tiếp giữa các tiến trình có chi phí cao.
- Chuyển đổi từ tiến trình này sang tiến trình khác đòi hỏi thời gian để đăng ký việc lưu và tải các bản đồ bộ nhớ, các danh sách cập nhật, …
- Đa nhiệm dựa trên luồng (Thread) – Đa luồng (MultiThreading).
- Các luồng chia sẻ không gian địa chỉ ô nhớ giống nhau.
- Luồng là nhẹ.
- Sự giao tiếp giữa các luồng có chi phí thấp.
Đa tiến trình (multiprocessing) và đa luồng (multithreading) cả hai được sử dụng để tạo ra hệ thống đa nhiệm (multitasking). Nhưng chúng ta sử dụng đa luồng nhiều hơn đa tiến trình bởi vì các luồng chia sẻ một vùng bộ nhớ chung. Chúng không phân bổ vùng bộ nhớ riêng biệt để tiết kiệm bộ nhớ, và chuyển đổi ngữ cảnh giữa các luồng mất ít thời gian hơn tiến trình.