Công lý

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

[Globalizethis]

Trong bài viết này, chúng ta sẽ đi tìm hiểu biết những 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 với thể thực hiện một làm việc riêng biệt. Trong Java, những luồng được quản lý bởi máy ảo Java (JVM).

du khách đ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 với thể với những 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 những chương trình chơi nhạc là một ví dụ điển hình về đa luồng.

+ lúc duyệt một trang web, với rất nhiều hình ảnh, CSS, javascript… được tải đồng thời bởi những luồng khác nhau.

+ lúc play nhạc, chúng ta vẫn với 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 sử dụng.

Đa nhiệm (multitasking)

Multitasking:Là năng lực 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 nền tảng sử dụng. nền tảng sử dụng quản lý việc này và sắp xếp lịch phù hợp cho những chương trình đó. Ví dụ, trên nền tảng sử dụng Windows chúng ta với làm việc đồng thời với những 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 với 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 với đị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 những tiến trình với kinh 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 những bản đồ bộ nhớ, những danh sách cập nhật, …Đa nhiệm dựa trên luồng (Thread) – Đa luồng (MultiThreading).những luồng chia sẻ ko gian địa chỉ ô nhớ giống nhau.Luồng là nhẹ.Sự giao tiếp giữa những luồng với kinh 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ì những luồng chia sẻ một vùng bộ nhớ chung. Chúng ko 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 những 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ó ko chặn người sử dụng vì những luồng là độc lập và du khách với thể thực hiện nhiều làm việc cùng một lúc.Mỗi luồng với thể sử dụng chung và chia sẻ nguồn tài nguyên trong quá trình chạy, nhưng với thể thực hiện một cách độc lập.Luồng là độc lập vì vậy nó ko ảnh hưởng tới luồng khác nếu ngoại lệ xảy ra trong một luồng duy nhất.với 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 với thể được tách thành : luồng chính chạy giao diện người sử dụng và những luồng phụ nhiệm gửi kết quả xử lý tới 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 những luồng chết (dead lock), luồng chạy mà ko làm gì trong ứng dụng cả.

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

Cách tạo Thread trong Java

Trong java ta với thể tạo ra một luồng bằng một trong hai cách sau: tạo một mục tiêu 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 những làm việc sau:

Khai báo một 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 lúc luồng bắt đầu chạy. Sau lúc luồng chạy xong tất cả những câu lệnh trong phương thức run thì luồng cũng tự hủy.Tạo một thể hiện (hay một mục tiêu) của lớp ta vừa khai báo.Sau đó gọi phương thức start() của mục tiêu 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 làm việc cần làm của luồng trong phương thức run() nhưng lúc thực thi luồng ta phải gọi phương thức start(). Vì đây là phương thức tính năng hot 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à ko gọi start() thì cũng tương đương với việc gọi một phương thức của một mục tiêu 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ứ ko chạy ở luồng mới tạo ra, nên vẫn chỉ với một luồng chính làm việc chứ ứng dụng vẫn ko phải là đa luồng.Sau lúc start một thread, nó ko bao giờ với thể được start lại. Nếu du khách 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 những làm việc sau :

Khai báo một 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 lúc luồng bắt đầu chạy. Sau lúc luồng chạy xong tất cả những câu lệnh trong phương thức run thì luồng cũng tự hủy.Tạo một thể hiện (hay một mục tiêu) của lớp ta vừa khai báo. (VD : Tên mục tiêu là r1)Tạo một thể hiện của lớp Thread bằng phương thức khởi tạo :Thread(Runnable target)Runnable target:Là một mục tiêu 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 mục tiêu 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(); lúc nào implements từ interface Runnable?

+ Cách hay được sử dụng và được yêu thích là sử dụnginterface Runnable, bởi vì nó ko 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ỉ với interface mới với thể giúp giải quyết vấn đề. Ngoài ra,Thread Poolrất hiểu biết quả và với thể được cài đặt, sử dụng rất hơn giản.+ Trong trường hợp còn lại ta với 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);

Nguồn : Sưu tầm

Related Articles

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Back to top button