Thread Trong Java - Học Java Miễn Phí Hay Nhất - VietTuts

Nested Interface trong java Đa luồng (Multithreading) trong java

Nội dung chính

  • Đa luồng (multithreading) trong java
    • Đa luồng (Multithreading) trong java
    • Vòng đời của thread trong java
    • Tạo thread trong java
    • Thread scheduler trong java
    • Phương thức sleep trong java
    • Start một thread hai lần
    • Gọi phương thức run()
    • Phương thức join()
    • Đặt tên cho Thread
    • Mức ưu tiên của một Thread
    • Luồng hiểm trong java
    • Thread pool trong java
    • Thread group trong java
    • Shutdown Hook trong java
    • Thực hiện nhiều task
    • Garbage Collection trong java
    • Lớp Runtime trong java
  • Đồng bộ trong java (Java Synchronization)
    • Phương thức đồng bộ trong java
    • Khối đồng bộ trong java
    • Phương thức đồng bộ static
    • Deadlock trong java
    • Giao tiếp giữa các thread trong Java
    • Interrupt một thread trong java

Đa luồng (multithreading) trong java

Đa luồng (Multithreading) trong java

Đa luồng (multithreading) trong java là một tiến trình thực hiện nhiều luồng đồng thời.

Luồng (thread) về cơ bản là một tiến trình con (sub-process). Nó là đơn vị nhỏ nhất của tiến trình. Đ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).

Chi tiết...

Vòng đời của thread trong java

Một thead có thể nằm trong một trong năm trạng thái. Theo Sun, chỉ có 4 trạng thái trong vòng đời của thread trong java đó là new, runnable, non-runnable và terminated. Không có trạng thái run.

Nhưng để hiểu rõ hơn các thread, chúng ta sẽ tìm hiểu thread ở trong 5 trạng thái.

Chi tiết...

Tạo thread trong java

Có hai cách để tạo ra một thread:

  1. Bởi extends lớp Thread
  2. Bởi implements Runnable interface.

Chi tiết...

Thread scheduler trong java

Thread scheduler trong java hay trình lên lịch của thread trong java là một phần của JVM có nhiệm vụ quyết định thread nào nên được chạy.

Không có sự đảm bảo rằng thread có trạng thái runnable nào sẽ được chọn để chạy bởi thread scheduler.

Chi tiết...

Phương thức sleep trong java

Phương thức sleep() của lớp Thread được sử dụng để tạm ngứng một thread cho một khoảng thời gian nhất định.

Lớp Thread cung cấp hai phương thức để tạm ngưng một thread:

  • public static void sleep(long miliseconds)throws InterruptedException
  • public static void sleep(long miliseconds, int nanos)throws InterruptedException

Chi tiết...

Start một thread hai lần

Có thể start một thread hai lần không?

Khô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ệ IllegalThreadStateException sẽ xảy ra.

Chi tiết...

Gọi phương thức run()

Chuyện gì xảy ra khi gọi trực tiếp phương thức run() thay vì phương thức start()

  • Mỗi thread start trong một call stack riêng biệt.
  • Việc gọi phương thức run() từ luồng chính, phương thức run() được xếp vào call stack chứ không phải khởi tạo một call stack mới.

Chi tiết...

Phương thức join()

Phương thức join() chờ một thread chết. Nói cách khác, nó làm cho các thread đang chạy ngừng hoạt động cho đến khi luồng mà nó tham gia hoàn thành nhiệm vụ của nó.

Chi tiết...

Đặt tên cho Thread

Lớp Thread cung cấp các phương thức để thay đổi và lấy ra tên cho một thread. Theo mặc định, mỗi thread có một tên, tức là thread-0, thread-1, v.v. Bởi chúng ta có thể thay đổi tên của thread bằng cách sử dụng phương thức setName(). Cú pháp của setName() và getName() như sau:

Chi tiết...

Mức ưu tiên của một Thread

Mỗi thread có một mức ưu tiên (priority). Ưu tiên được đại diện bởi một số từ 1 đến 10. Trong hầu hết các trường hợp, lịch trình của thread được sắp xếp theo thứ tự ưu tiên của chúng (được gọi là lập kế hoạch ưu tiên). Nhưng nó không được bảo đảm bởi vì nó phụ thuộc vào thông số kỹ thuật của JVM.

Chi tiết...

Luồng hiểm trong java

Luồng hiểm trong java (thread daemon) là một luồng cung cấp dịch vụ cho luồng người dùng. Thời gian sống của nó phụ thuộc vào các luồng người dùng. Tức là khi tất cả các luồng người dùng chết, JVM sẽ tự động chấm dứt luồng này.

Có nhiều luồng hiểm java chạy tự động, ví dụ: Gc, finalizer, v.v.

Chi tiết...

Thread pool trong java

Thread pool trong java đại diện cho một nhóm các luồng đang chờ đợi công việc và tái sử dụng nhiều lần.

Trong trường hợp thread pool, một nhóm các thread có kích thước cố định được tạo ra. Một thread từ thread pool được kéo ra và được service provider phân công một công việc. Sau khi hoàn thành công việc, thread đó được chứa trong thread pool một lần nữa.

Chi tiết...

Thread group trong java

Java cung cấp một cách thuận tiện để nhóm nhiều thread trong một đối tượng duy nhất. Bằng cách đó, chúng ta có thể suspend, resume hoặc interrupt một nhóm các thread bằng việc gọi một phương thức duy nhất.

Chi tiết...

Shutdown Hook trong java

Shutdown Hook có thể được sử dụng để thực hiện dọn sạch tài nguyên hoặc lưu trữ trạng thái khi JVM tắt bình thường hoặc đột ngột. Thực hiện dọn sạch tài nguyên có nghĩa là đóng file log, gửi một số cảnh báo hoặc cái gì đó khác. Vì vậy, nếu bạn muốn thực hiện một vài dòng code trước khi JVM tắt, sử dụng shutdown hook.

Chi tiết...

Thực hiện nhiều task

Làm thế nào để thực hiện task duy nhất bởi nhiều thread?

Nếu bạn phải thực hiện task duy nhất bởi nhiều thread, chỉ có một phương thức run(). Ví dụ:

Chi tiết...

Garbage Collection trong java

Trong java, rác (garbage) có nghĩa là các đối tượng không còn được tham chiếu nữa.

Bộ thu gom rác (Garbage Collection) trong java được sử dụng để thực hiện quá trình tự động khôi phục lại bộ nhớ không được sử dụng tại runtime một cách tự động. Nói cách khác, đó là một cách để phá hủy các đối tượng không sử dụng nữa.

Chi tiết...

Lớp Runtime trong java

Lớp Runtime trong java được sử dụng để tương tác với môi trường runtime. Lớp Java Runtime cung cấp các phương thức để thực hiện một tiến trình, gọi GC, lấy tổng số và bộ nhớ free. Chỉ có một thể hiện của lớp java.lang.Runtime có sẵn cho một ứng dụng java.

Chi tiết...

Đồng bộ trong java (Java Synchronization)

Phương thức đồng bộ trong java

Đồng bộ trong java (Synchronization in java) là khả năng kiểm soát truy cập của nhiều luồng đến bất kỳ nguồn tài nguyên chia sẻ (shared resource).

Chi tiết...

Khối đồng bộ trong java

Khối đồng bộ trong java (Synchronized block) có thể được sử dụng để thực hiện đồng bộ hóa trên bất kỳ tài nguyên cụ thể nào của phương thức.

Chi tiết...

Phương thức đồng bộ static

Nếu bạn tạo ra bất kỳ phương thức nào với từ khóa synchronized được gọi là phương thức đồng bộ static, khi đó khóa sẽ được sử dụng trên lớp không phải trên đối tượng.

Chi tiết...

Deadlock trong java

Deadlock trong java hay bế tắc trong java là một phần của đa luồng. Deadlock có thể xảy ra trong trường hợp một luồng đang đợi một khóa đối tượng (object lock), được sử dụng bởi một luồng khác và luồng thứ hai đang chờ đợi một khóa đối tượng (object lock) được sử dụng bởi luồng thứ nhất. Vì cả hai luồng đang chờ đợi nhau để giải phóng khóa, tình trạng này được gọi là bế tắc (deadlock).

Chi tiết...

Giao tiếp giữa các thread trong Java

Giao tiếp giữa các thread trong Java (Inter-thread communication) là một kỹ thuật cho phép các luồng đồng bộ để giao tiếp với nhau.

Chi tiết...

Interrupt một thread trong java

Interrupt một thread trong java hay làm gián đoạn một luồng trong java. Nếu thread nằm trong trạng thái sleep hoặc wait (nghĩa là sleep() hoặc wait() được gọi ra), việc gọi phương thức interrupt() trên thread đó sẽ phá vỡ trạng thái sleep hoặc wait và ném ra ngoại lệ InterruptedException...

Chi tiết...

Nested Interface trong java Đa luồng (Multithreading) trong java

Từ khóa » đa Luồng Thread Java