Sự Khác Nhau Giữa Process Và Thread Là Gì, Nghĩa Của Từ Thread

[ad_1]

Trong bài viết này, chúng ta sẽ đi tìm hiểu các khái niệm cơ bản: Thread là gì? Multi- thread là gì? và tạo Thread trong java bằng cách extend từ Thread Class hoặc implement interface Runnable

*

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).

Bạn đang xem: Thread là gì

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.

Xem thêm: Oskar Fischinger Là Ai – Oskar Fischinger’S 117Th Birthday

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

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.Mỗi luồng có thể dùng chung và chia sẻ nguồn tài nguyên trong quá trình chạy, nhưng có thể thực hiện một cách độc lập.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.Có thể thực hiện nhiều hoạt động với nhau để tiết kiệm thời gian. Ví dụ một ứng dụng có thể được tách thành : luồng chính chạy giao diện người dùng và các luồng phụ nhiệm gửi kết quả xử lý đến luồng chính.

Nhược điểm của đa luồng

Càng nhiều luồng thì xử lý càng phức tạp.Xử lý vấn đề về tranh chấp bộ nhớ, đồng bộ dữ liệu khá phức tạp.Cần phát hiện tránh các luồng chết (dead lock), luồng chạy mà không làm gì trong ứng dụng cả.

Deadlock (Khoá chết) là gì? Deadlock xảy ra khi 2 tiến trình đợi nhau hoàn thành, trước khi chạy. Kết quả của quá trình là cả 2 tiến trình không bao giờ kết thúc.

Cách tạo Thread trong Java

Trong java ta có thể tạo ra một luồng bằng một trong hai cách sau: tạo 1 đối tượng của lớp đượcextendtừclassThreadhoặcimplementstừinterfaceRunnable.

Tạo luồng bằng cách extend từ lớp Thread

Để tạo luồng bằng cách tạo lớp kế thừa từ lớp Thread, ta phải làm các công việc sau:

Khai báo 1 lớp mới kế thừa từ lớp ThreadOverride lại phương thức run ở lớp này, những gì trong phương thức run sẽ được thực thi khi luồng bắt đầu chạy. Sau khi luồng chạy xong tất cả các câu lệnh trong phương thức run thì luồng cũng tự hủy.Tạo 1 thể hiện (hay 1 đối tượng) của lớp ta vừa khai báo.Sau đó gọi phương thức start() của đối tượng này để bắt đầu thực thi luồng.

public class TheadSimple extends Thread { public void run() { System.out.println(“thread is running…”); } public static void main(String args) { TheadSimple t1 = new TheadSimple(); t1.start(); }}Lưu ý :

Tuy ta khai báo những công việc cần làm của luồng trong phương thức run() nhưng khi thực thi luồng ta phải gọi phương thức start(). Vì đây là phương thức đặc biệt mà java xây dựng sẵn trong lớp Thread, phương thức này sẽ cấp phát tài nguyên cho luồng mới rồi chạy phương thức run() ở luồng này.Vì vậy, nếu ta gọi phương thức run() mà không gọi start() thì cũng tương đương với việc gọi 1 phương thức của 1 đối tượng bình thường và phương thức vẫn chạy trên luồng mà gọi phương thức chứ không chạy ở luồng mới tạo ra, nên vẫn chỉ có 1 luồng chính làm việc chứ ứng dụng vẫn không phải là đa luồng.Sau khi start một thread, nó không bao giờ có thể được start lại. Nếu bạn làm như vậy, một ngoại lệIllegalThreadStateExceptionsẽ xảy ra.

Tạo luồng bằng cách implement từ Interface Runnable

Để tạo luồng bằng cách hiện thực từ Interface Runnable, ta phải làm các công việc sau :

Khai báo 1 lớp mới implements từ Interface RunnableHiện thực phương thức run() ở lớp này, những gì trong phương thức run() sẽ được thực thi khi luồng bắt đầu chạy. Sau khi luồng chạy xong tất cả các câu lệnh trong phương thức run thì luồng cũng tự hủy.Tạo 1 thể hiện (hay 1 đối tượng) của lớp ta vừa khai báo. (VD : Tên đối tượng là r1)Tạo 1 thể hiện của lớp Thread bằng phương thức khởi tạo :Thread(Runnable target)Runnable target:Là 1 đối tượng thuốc lớp được implements từ giao diện Runnable.Ví dụ: Thread t1 = new Thread(r1);Gọi phương thức start() của đối tượng t1.

public class RunnableSimple implements Runnable { public void run() { System.out.println(“thread is running…”); } public static void main(String args) { RunnableSimple runable = new RunnableSimple(); Thread t1 = new Thread(runable); t1.start(); }}Khi nào implements từ interface Runnable?

+ Cách hay được sử dụng và được yêu thích là dùnginterface Runnable, bởi vì nó không yêu cầu phải tạo một lớp kế thừa từ lớp Thread. Trong trường hợp ứng dụng thiết kế yêu cầu sử dụng đa kế thừa, chỉ có interface mới có thể giúp giải quyết vấn đề. Ngoài ra,Thread Poolrất hiểu quả và có thể được cài đặt, sử dụng rất hơn giản.+ Trong trường hợp còn lại ta có thể kế thừa từ lớp Thread.

Ví dụ minh họa sử dụng đa luồng

Ví dụ Tạo luồng bằng cách extend từ class Thread

Tạo luồng extend từ class Thead

public class ThreadDemo extends Thread { private Thread t; private String threadName; ThreadDemo(String name) { threadName = name; System.out.println(“Creating ” + threadName); }

[ad_2]

Related Posts

Ban tổ chức tiếng Anh là gì – Tổ chức tiếng Anh là gì

[ad_1] ContentsRelated posts:Ban tổ chức tiếng Anh là gì – Tổ chức tiếng Anh là gì – Từ vựng liên quan Ban tổ chức được hiểu là…

Bảo hiểm xã hội tiếng anh là gì

[ad_1] ContentsRelated posts:Bảo hiểm xã hội tiếng Anh là gì – Sổ bảo hiểm xã hội tiếng Anh Bảo hiểm Xã hội Việt Nam Bảo hiểm xã…

Cộng trừ nhân chia tiếng Anh

[ad_1] Trong chương này mình sẽ trình bày cách đọc và viết Bốn phép toán cơ bản trong tiếng Anh. Đó là các phép toán cộng, trừ,…

Nhân viên kinh doanh tiếng Anh là gì

[ad_1] ContentsRelated posts:Nhân viên kinh doanh tiếng Anh là gì – Chuyên viên kinh doanh tiếng anh Nhân viên kinh doanh là một ngành nghề phổ biến…

Trái cóc tiếng Anh là gì

[ad_1] Trong giao tiếp hằng ngày, chúng ta cần sử dụng rất nhiều từ khác nhau để cuộc giao tiếp trở nên thuận tiện hơn. Điều này…

Hẻm tiếng Anh là gì – Ngõ hẻm tiếng anh là gì

[ad_1] ContentsRelated posts:Hẻm tiếng Anh là gì – Ngõ hẻm tiếng anh là gì – Đường hẻm tiếng anh là gì Hẻm là từ tưởng chừng như…

Leave a Reply