Mặt kính Ceramic Shield trên iPhone là gì? Sự khác biệt so với Gorilla Glass Victus
4 cách viết code đa luồng trong Java

Cách 1: Mở rộng lớp Thread
Java cung cấp lớp Thread có thể mở rộng để thực hiện run(). run() chính là nơi để thực thi tác vụ. Khi bạn muốn khởi động một tác vụ trong thread riêng của nó, có thể tạo instance trong class này và gọi start(). Điều này sẽ bắt đầu thực hiện thread và chạy để hoàn thành (hoặc chấm dứt) tác vụ.
public class MyThread extends Thread { private int sleepFor; public MyThread(int sleepFor) { this.sleepFor = sleepFor; } @Override public void run() { System.out.printf('[%s] thread startingn', Thread.currentThread().toString()); try { Thread.sleep(this.sleepFor); } catch(InterruptedException ex) {} System.out.printf('[%s] thread endingn', Thread.currentThread().toString()); } }[/code] Tạo instance của lớp Thread này bằng cách đưa cho nó số mili giây để ngủ.
MyThread worker = new MyThread(sleepFor);[/code] Khởi chạy tiến trình của luồng worker trên bằng cách gọi phương thức start() của nó. Phương thức này sẽ trả về control ngay lập tức cho caller mà không cần đợi luồng chấm dứt.
worker.start(); System.out.printf('[%s] main threadn', Thread.currentThread().toString());[/code] Và đây là đầu ra khi chạy code này. Nó chỉ ra rằng thread chính được in trước khi luồng worker hoàn thành.
[Thread[main,5,main]] main thread [Thread[Thread-0,5,main]] thread starting [Thread[Thread-0,5,main]] thread ending[/code] Bởi vì không có lệnh nào sau khi bắt đầu luồng worker, luồng chính sẽ đợi cho luồng worker kết thúc trước khi chương trình thoát. Điều này cho phép luồng worker hoàn thành hết các tác vụ của mình.
Cách 2: Sử dụng Thread Instance với Runnable
Java cũng cung cấp một giao diện gọi là Runnable, có thể được thực hiện bởi một lớp worker để thực thi tác vụ trong phương thức run() của nó. Đây là một cách khác để tạo lớp worker thay vì mở rộng lớp Thread (được mô tả bên trên).
public class Fruit { // fruit specifics here } public class Papaya extends Fruit { // override behavior specific to papaya here }[/code] Bây giờ, giả sử có một số tác vụ tốn thời gian mà Papaya cần hỗ trợ, có thể được thực hiện trong một luồng riêng biệt. Trường hợp này có thể được xử lý bằng cách yêu cầu lớp Papaya thực thi Runnable và cung cấp phương thức run() nơi mà nhiệm vụ này được thực hiện.
public class Papaya extends Fruit implements Runnable { // override behavior specific to papaya here @Override public void run() { // time consuming task here. } }[/code] Để khởi động luồng worker, tạo một instance của lớp worker và giao nó cho instance Thread trong quá trình tạo. Khi phương thức start() của Thread được gọi, nhiệm vụ sẽ thực hiện trong một luồng riêng biệt.
Papaya papaya = new Papaya(); // set properties and invoke papaya methods here. Thread thread = new Thread(papaya); thread.start();[/code] Và đó là cách đơn giản để sử dụng Runnable thực hiện tác vụ trong một luồng.
Cách 3: Triển khai Runnable với ExecutorService
Bắt đầu từ phiên bản 1.5, Java có thêm ExecutorService như một mô hình mới để tạo và quản lý các luồng trong một chương trình. Nó tổng quát khái niệm về việc triển khai luồng bằng cách trừu tượng hóa việc tạo các luồng. Điều này là do bạn có thể chạy nhiều tác vụ trong nhóm luồng, sử dụng luồng riêng biệt cho mỗi tác vụ. Nhờ đó, chương trình có thể theo dõi và quản lý xem có bao nhiêu luồng được sử dụng cho các tác vụ worker.
ExecutorService esvc = Executors.newSingleThreadExecutor(); Runnable worker = new MyThread2(sleepFor); Future<?> future = esvc.submit(worker); System.out.printf('[%s] main threadn', Thread.currentThread().toString()); future.get(); esvc.shutdown();[/code] Lưu ý rằng, ExecutorService phải được đóng lại đúng cách khi không cần dùng đến nó để submit các tác vụ tiếp theo.
Cách 4: Sử dụng Callable với ExecutorService
Trong phiên bản 1.5 Java giới thiệu Callable mới, khá giống với Runnable. Khác biệt là phương thức thưc hiện (được gọi là call() thay vì run()) có thể trả về một giá trị. Nó cũng có thể khai báo một Exception được đưa vào. ExecutorService có thể chấp nhận các tác vụ được thực hiện như Callable và trả về Future với giá trị được trả về bởi phương thức khi kết thúc tác vụ.
public class Mango extends Fruit implements Callable { public Integer call() { // expensive computation here return new Integer(0); } }[/code] Và đây là code để submit môt instance của lớp vào ExcecutorService. Đoạn code bên dưới cũng đợi đến khi tác vụ hoàn thành và in giá trị nó trả về.
ExecutorService esvc = Executors.newSingleThreadExecutor(); MyCallable worker = new MyCallable(sleepFor); Future future = esvc.submit(worker); System.out.printf('[%s] main threadn', Thread.currentThread().toString()); System.out.println('Task returned: ' + future.get()); esvc.shutdown();[/code]
Bạn thích cách tạo thread nào hơn?
Trong bài này, chúng ta có phương pháp để viết code đa luồng trong Java.Hy vọng bài viết có thể giúp bạn một phần nào đó!
Nguồn: https://quantrimang.com/4-cach-viet-code-da-luong-trong-java-137931
TIN LIÊN QUAN
Hướng dẫn cài đặt Oracle Java trên Ubuntu Linux
Nếu đã cài đặt Oracle Java 7 trên hệ điều hành nhưng muốn nâng cấp, hãy tham khảo bài hướng dẫn nâng cấp Oracle Java trên Ubuntu Linux. Với những người chỉ muốn cài đặt Oracle Java JRE để chạy ứng dụng Java chứ không phát triển chương trình Java,
Hướng dẫn cách mở và chạy tập tin JAR khả thi
Tương tự, đa số tệp JAR khả thi được tải về như một file cài đặt với mục đích cài đặt ứng dụng hay chương trình. Do đó, nếu gặp vấn đề trong việc mở file, bạn nên kiểm tra lại xem tệp JAR của bạn có tương thích với hệ điều hành hay không.
Hướng dẫn cách cài đặt Java cho máy tính
Chúng ta có thể thấy rõ nhất vai trò của Java khi chơi các game dạng như Minecraft và lỗi Java trên Minecraft là một trong những lỗi cực kỳ phổ biến. Vì vậy, việc cài Java lên máy tính cũng là một cách sửa lỗi Java trên Minecraft .
Lý do khiến ngôn ngữ lập trình C không bao giờ lỗi thời
Tạp chí IEEE Spectrum xếp ngôn ngữ C như là ngôn ngữ hàng đầu trong năm 2017 trước cả Java, C # và jаvascript. Nếu bạn học C trong năm nay, nó sẽ không làm lãng phí thời gian và công sức của bạn. Dưới đây là năm lý do tại sao.
Những vấn đề cần nắm bắt khi bắt đầu học lập trình máy tính
Lập trình thật vui và vô cùng hữu dụng. Với lập trình, bạn sẽ được thỏa sức sáng tạo cùng nhiều cơ hội việc làm rộng mở. Nếu muốn học cách lập trình, hãy đọc chỉ dẫn dưới đây để nắm được nơi bạn cần đi và những gì mà bạn cần học.
Những điều cần làm ngay lập tức khi diệt xong Virus
Nếu máy vi tính của bạn bị nhiễm virus hoặc các loại mã độc khác, quét virus mới chỉ là bước đầu tiên. Bạn cần thực hiện thêm nhiều bước để đảm bảo rằng máy vi tính của bạn luôn được đảm bảo an toàn.
Apple phát hành công cụ gỡ bỏ Flashback
Apple vừa phát hành công cụ mới để loại bỏ Flashback, phần mềm giả mạo dùng để ăn cắp thông tin người dùng.
THỦ THUẬT HAY
"Trái tim rỉ máu" đe dọa thiết bị Android 4.1.1
Không chỉ website bị ảnh hưởng bởi lỗi bảo mật nguy hiểm Heartbleed đang đe dọa người dùng mạng trên toàn cầu, thiết bị Android 4.1.1 Jelly Bean cũng là nạn nhân ' Trái tim rỉ máu '. TIN NÓNG: 'Trái tim rỉ máu' chưa
20 cách sinh tồn trong mùa nồm siêu hiệu quả
Trời nồm là ác mộng của nhiều gia đình miền Bắc. Trời nồm khiến bạn cảm thấy mệt mỏi, đồ dùng bị ẩm mốc, quần áo không khô mùi hôi khó chịu. Sàn nhà luôn trong trạng thái ướt dễ gây trượt té. Vậy có cách làm nhà bớt
Cách tạo hình ảnh động với hiệu ứng đặc biệt chỉ với iOS 11 và Live Photo
Bản cập nhật iOS 11 mang lại khá nhiều thay đổi trong giao diện cũng như thêm các tính năng hay. Bài viết này sẽ hướng dẫn bạn tạo ra những bức...
Cách tìm kiếm lý lịch trực tuyến miễn phí
Bạn đang nghĩ gì, chúng tôi biết. Tuy nhiên, hãy lắng nghe chúng tôi. Có rất nhiều lý do khiến bạn nên thực hiện một cuộc kiểm tra lý lịch trực tuyến, và không phải tất cả đều sơ sài.
Hướng dẫn cách gỡ bỏ phần mềm độc hại đa nền tảng trên Facebook Messenger
Phần mềm độc hại không có gì là mới, nhưng vào mùa hè năm 2017 đã xuất hiện một biến thể mới nhắm mục tiêu tới người dùng qua Facebook Messenger và thông báo họ cài đặt phần mềm adware hoặc Trojan. Làm thế nào bạn có
ĐÁNH GIÁ NHANH
Đánh giá Samsung Galaxy Fit 2: có nổi bật với mức giá khá rẻ?
Samsung Galaxy Fit 2 là chiếc smartband mới nhất của gã khổng lồ công nghệ đến từ Hàn Quốc. Đây là phiên bản nâng cấp của Galaxy Fit trước đây. Thiết kế và màn hình Galaxy Fit 2 sẽ có màn hình hiển thị với kích thước
Review củ sạc GaN Belkin 65W: Sạc siêu nhanh, Hỗ trợ PD 3.0, 2 cổng Type C
Trong thời đại công nghệ hiện nay, điện thoại, máy tính và các thiết bị di động là một phần không thể thiếu của cuộc sống. Tuy nhiên, việc sạc lại pin có thể là một thách thức đối với nhiều người. Củ sạc GaN Belkin 65W
Đánh giá chuột DeathAdder Elite và bàn phím cơ BlackWidow Chroma V2
Được thiết kế và sản xuất với nhà cung cấp nút click chuột hàng đầu thế giới: Omron, các thiết bị chuyển mạch mới được tối ưu hóa và tinh chỉnh để có thời gian phản hồi nhanh nhất cho trò chơi và tăng độ bền lên đến 50