Đa luồng trong Java

Tiến trình (process) là gì?

Tiến trình là một bộc lộ của một chương trình đang giải quyết và xử lý. Sở hữu một con trỏ lệnh, tập những thanh ghi và những biến. Để triển khai xong tác vụ của mình, một tiến trình còn cần đến 1 số ít tài nguyên khác như : CPU, bộ nhớ, những tập tin, những thiết bị ngoại vi …
Cần phân biệt được giữa tiến trình và chương trình. Một chương trình là một bộc lộ thụ động, chứa những thông tư điều khiển và tinh chỉnh máy tính để thực thi mục tiêu gì đó ; khi cho thực thi thông tư này thì chương trình sẽ biến thành tiến trình
Có thể nói tóm tắt tiến trình là một chương trình chạy trên hệ điều hành quản lý và được quản trị trải qua một số hiệu .

Luồng (thread) là gì?

Một luồng là một đơn vị xử lý cơ bản trong hệ thống. Mỗi luồng xử lý tuần tự các đoạn code của nó, sở hữu một con trỏ lệnh, một tập các thanh ghi và một vùng nhớ stack riêng, các luồng chia sẻ CPU với nhau giống như cách chia sẻ giữa các tiến trình. Một tiến trình sở hữu nhiều luồng, tuy nhiên một luồng chỉ có thể thuộc về một tiến trình, các luồng bên trong cùng một tiến trình chia sẻ nhau không gian địa chỉ chung, điều này có nghĩa là các luồng có thể chia sẻ nhau các biến toàn cục của tiến trình. Một luồng cũng có thể có các trạng thái giống như các trạng thái của một tiến trình.

Bạn đang đọc: Đa luồng trong Java

Hệ điều hành đơn nhiệm, đa nhiệm

  • Hệ điều hành đơn nhiệm là hệ điều hành chỉ cho phép 1 tiến trình chạy tại một thời điểm, ví dụ hệ điều hành DOS là Hệ điều hành đơn nhiệm.
  • Hệ điều hành đa nhiệm cho phép nhiều tiến trình chạy tại một thời điểm, ví dụ hệ điều hành windows, Unix, Linux là các hệ điều hành đa nhiệm
  • Hệ điều hành đa nhiệm ưu tiên: các tiến trình được cấp phát thời gian sử dụng CPU theo mức ưu tiên khác nhau
  • Hệ điều hành đa nhiệm không ưu tiên: các tiến trình không có mức ưu tiên nào cả, chúng “tự giác” nhả quyền kiểm soát CPU sau khi kết thúc phần công việc

Chú ý: trong thực tế mỗi máy thường chỉ có 1 CPU, nên không thể có nhiều tiến trình chạy tại một thời điểm. Nên thông thường sự đa chương chỉ là giả lập. Chúng được giả lập bằng cách lưu trữ nhiều tiến trình trong bộ nhớ tại một thời điểm, và điều phối CPU qua lại giữa các tiến trình.

Các trạng thái của tiến trình

Trạng thái của một tiến trình tại một thời gian được xác lập bởi hoạt động giải trí hiện thời của tiến trình đó. Trong quy trình sống một tiến trình biến hóa trạng thái do nhiều nguyên do như hết thời hạn sử dụng CPU, phải chờ một sự kiện nào đó xẩy ra, hay đợi một thao tác nhập / xuất hoàn tất …

Tại một thời điểm một tiến trình có thể nhận một trong các trạng thái sau đây:

  • Tạo mới: tiến trình đang được thành lập
  • Running: các chỉ thị của tiến trình đang được xử lý, hay nói cách khác tiến trình đang sở hữu CPU
  • Blocked: tiến trình đang chờ được cấp tài nguyên, hay chờ một sự kiện nào đó xẩy ra
  • Ready: tiến trình đang chờ cấp CPU để xử lý
  • Kết thúc: tiến trình đã hoàn tất việc xử lý

Đa luồng trong java là gì?

Đa luồng ( Multi Thread ) là một tiến trình triển khai nhiều luồng đồng thời. Trong một chương trình, ngoài luồng chính thì hoàn toàn có thể có những luồng khác thực thi đồng thời làm ứng dụng chạy nhanh và hiệu suất cao hơn. Theo như những gì tất cả chúng ta làm từ trước đến giờ, thì code của tất cả chúng ta sẽ được mạng lưới hệ thống giải quyết và xử lý một cách tuần tự từ trên xuống dưới .

Đa luồng trong java

Giả sử chương trình của tất cả chúng ta chia ra làm 3 phần A, B, C và chương trình sẽ chạy lần lượt từ A, rồi đến B, và ở đầu cuối là C. Nhưng sau bài viết này, tất cả chúng ta sẽ tổ chức triển khai sao cho A, B, C là 3 thread độc lập nhau và mạng lưới hệ thống sẽ giải quyết và xử lý 3 thread này một cách đồng thời .
Một ví dụ đơn thuần về đa luồng đó chính là trình phát nhạc trên điện thoại cảm ứng của bạn. Khi bạn đang nghe một bài hát, bạn thấy hay và bạn muồn tải nó về, thì quy trình tải bài hát đó sẽ được chạy trên một thread riêng, quy trình phát nhạc được chạy trên một thread riêng nữa, thế cho nên bạn vừa hoàn toàn có thể nghe nhạc đồng thời hoàn toàn có thể tải bài hát đó về máy .
Đa luồng trong java được sử dụng hầu hết trong những game, phim hoạt hình, …

Ưu điểm của đa luồng trong java

  • Nó không chặn người sử dụng vì các luồng là độc lập và bạn có thể thực hiện nhiều công việc cùng một lúc.
  • Bạn có thể thực hiện nhiều hoạt động với nhau để tiết kiệm thời gian.
  • Luồng là độc lập vì vậy nó không ảnh hưởng đến luồng khác nếu ngoại lệ xảy ra trong một luồng duy nhất.