[LTM] Chương 6.9 : Describe a daemon thread (Mô tả 1 luồng)

Người đăng: share-nhungdieuhay on Thứ Tư, 26 tháng 3, 2014

Thread PRIORITY

Java gán cho mỗi tuyến đoạn một độ ưu tiên để xác định cách tuyến đoạn đó được xử lý như thế nào so với các tuyến đoạn khác.
Mỗi thread mới thừa kế quyền ưu tiên mà thread đã tạo ra nó.
A thread with a greater priority value will be run in preference to a thread with a smaller priority
Hằng số:

  • public static final int MIN_PRIORITY = 1; 
  • public static final int NORM_PRIORITY = 5; 
  • public static final int MAX_PRIORITY = 10;

Java gán cho mỗi tuyến đoạn một độ ưu tiên để xác định cách tuyến đoạn đó được xử lý như thế nào so với các tuyến đoạn khác. 
Mỗi thread mới thừa kế quyền ưu tiên mà thread đã tạo ra nó.
A thread with a greater priority value will be run in preference to a thread with a smaller priority
Hằng số:
  • public static final int MIN_PRIORITY = 1; 
  • public static final int NORM_PRIORITY = 5; 
  • public static final int MAX_PRIORITY = 10;
Phương thức:
  • setPriority(): thiết lập độ ưu tiên của tuyến đoạn hiện thời
  • getPriority(): nhận về độ ưu tiên của một tuyến đoạn
  • public static void sleep(long ms) throws InterruptedException :đưa tiến đoạn hiện hành vào trạng thái nghỉ tối thiểu là ms (mili  giây). 

Bế tắc-Deadlock
Deadlock: 
Một kiểu lỗi đặc biệt cần phải tránh có liên quan đến đa nhiệm, 
Xảy ra khi hai tuyến đoạn có một sự phụ thuộc xoay vòng trên một cặp đối tượng đồng bộ. 
Ví dụ, một tuyến đoạn chiếm dụng đối tượng X và một tuyến đoạn chiếm dụng đối tượng Y. 
 Nếu tuyến đoạn chiếm dụng X cố gắng gọi bất kỳ phương thức đồng bộ trên Y, thì nó sẽ bị phong tỏa.
 Nếu tuyến đoạn chiếm dụng Y gọi phương thức đồng bộ trên X, tuyến đoạn sẽ chờ vô hạn.
 Tuyến đoạn này chờ tuyến đoạn kia giải phóng đối tượng mà đối tượng kia đang bị chiếm dụng và ngược lại -> chờ đợi lẫn nhau (hoài vọng).

 Ex, Deadlock
Cần hạn chế deadlock:
  • Đưa ra và cải tiến việc cấp phát, 
  • thu hồi tài nguyên cho các thread 
  • khá nhiều thuật toán cải tiến việc này
Interrupt a Thread (gián đoạn)
Khi gọi phương thức Thread.sleep(int): đặt tuyến đoạn vào trạng thái nghỉ trong một khoảng thời gian xác định nào đó. 
Tuy nhiên để kích hoạt một tuyến đoạn sớm hơn ta phải sử dụng ngắt  tuyến đoạn. 
  • Phương thức interrupt(). 
  • Cần một tuyến đoạn khác tham chiếu tới tuyến đoạn hiện thời.
Ex: interrupt
Conditions thread not execute (Điều kiện không thực hiện)
If thread is:
  • Not of highest priority
  • Put to sleep using sleep() method
  • Is waiting because wait() method was called
  • Explicitly yielded using yield() method
  • Blocked for file I/O
Stop a Thread

Đôi khi cần thiết phải kết thúc một tuyến đoạn trước khi tác vụ của nó hoàn thành. 
  • Phương thức Thread.stop(). 
  • Đòi hỏi tuyến đoạn điều khiển duy trì một tham chiếu tới tuyến đoạn mà nó muốn dừng. 
Ex: stop Thread 
Review: Cycle of Thread
ThreadGroup

Constructor:
  • public ThreadGroup(String name) throws java.lang.SecurityException : Tạo ra một nhóm tuyến đoạn mới, có tên được xác định bởi  name. 
  • ThreadGroup(ThreadGroup parentGroup,String name) throws java.lang.SecurityException 
Tạo ra một nhóm tuyến đoạn mới name là nhóm con của ParentGroup
Ex:
ThreadGroup parent = new ThreadGroup("parent"); 
ThreadGroup subgroup = new ThreadGroup(parent, "sub");
Sử dụng một ThreadGroup 
Một nhóm tuyến đoạn có thể được sử dụng như một tuyến đoạn bình thường. 
Ta có thể tạm dừng, phục hồi, ngắt hoặc dừng nhóm tuyến đoạn bằng cách gọi phương thức thích hợp. 
Các phương thức 
int activeCount(): trả về số tuyến đoạn trong nhóm, và các nhóm con. 
int activeGroupCount(): trả về số nhóm con các tuyến đoạn 
boolean allowThreadSuspension(): chỉ ra tuyến đoạn bị tạm ngừng hay không. 
Ex: ThreadGroup
Daemon threads
Two types of threads in Java:

  • User threads: created by the user
  • Daemon threads: threads that work in the background providing service to other threads

e.g. – the garbage collector thread
When user thread exits, JVM checks to find out if any other thread is running.

  • If there are, it will schedule the next thread.
  • If the only executing threads are daemon threads, it exits.

We can set a thread to be a Daemon if we do not want the main program to wait until a thread ends.
Thread class has two methods to deal with Daemon threads:
  • public final void setDaemon(boolean value) : sets a thread to be a daemon thread
  • public final boolean isDaemon() : checks if the given thread is a daemon thread
Ex: Objex.isDaemon()
Daemon threads, ex

{ 0 nhận xét... read them below or add one }

Đăng nhận xét