Java Concurrency - Hoạt động chính
Core Java cung cấp khả năng kiểm soát hoàn toàn chương trình đa luồng. Bạn có thể phát triển một chương trình đa luồng có thể bị tạm dừng, tiếp tục hoặc dừng hoàn toàn dựa trên yêu cầu của bạn. Có nhiều phương thức tĩnh khác nhau mà bạn có thể sử dụng trên các đối tượng luồng để kiểm soát hành vi của chúng. Bảng sau liệt kê các phương pháp đó:
Sr.No. | Phương pháp & Mô tả |
---|---|
1 | public void suspend() Phương thức này đặt một luồng ở trạng thái bị treo và có thể được tiếp tục lại bằng cách sử dụng phương thức resume (). |
2 | public void stop() Phương pháp này dừng một chủ đề hoàn toàn. |
3 | public void resume() Phương thức này tiếp tục một luồng đã bị tạm ngưng bằng cách sử dụng phương thức Susan (). |
4 | public void wait() Làm cho luồng hiện tại đợi cho đến khi một luồng khác gọi thông báo (). |
5 | public void notify() Đánh thức một luồng duy nhất đang chờ trên màn hình của đối tượng này. |
Hãy lưu ý rằng các phiên bản Java mới nhất đã không còn sử dụng các phương thức Susan (), resume () và stop () và vì vậy bạn cần sử dụng các phương thức thay thế có sẵn.
Thí dụ
class RunnableDemo implements Runnable {
public Thread t;
private String threadName;
boolean suspended = false;
RunnableDemo(String name) {
threadName = name;
System.out.println("Creating " + threadName );
}
public void run() {
System.out.println("Running " + threadName );
try {
for(int i = 10; i > 0; i--) {
System.out.println("Thread: " + threadName + ", " + i);
// Let the thread sleep for a while.
Thread.sleep(300);
synchronized(this) {
while(suspended) {
wait();
}
}
}
} catch (InterruptedException e) {
System.out.println("Thread " + threadName + " interrupted.");
}
System.out.println("Thread " + threadName + " exiting.");
}
public void start () {
System.out.println("Starting " + threadName );
if (t == null) {
t = new Thread (this, threadName);
t.start ();
}
}
void suspend() {
suspended = true;
}
synchronized void resume() {
suspended = false;
notify();
}
}
public class TestThread {
public static void main(String args[]) {
RunnableDemo R1 = new RunnableDemo("Thread-1");
R1.start();
RunnableDemo R2 = new RunnableDemo("Thread-2");
R2.start();
try {
Thread.sleep(1000);
R1.suspend();
System.out.println("Suspending First Thread");
Thread.sleep(1000);
R1.resume();
System.out.println("Resuming First Thread");
R2.suspend();
System.out.println("Suspending thread Two");
Thread.sleep(1000);
R2.resume();
System.out.println("Resuming thread Two");
} catch (InterruptedException e) {
System.out.println("Main thread Interrupted");
} try {
System.out.println("Waiting for threads to finish.");
R1.t.join();
R2.t.join();
} catch (InterruptedException e) {
System.out.println("Main thread Interrupted");
}
System.out.println("Main thread exiting.");
}
}
Chương trình trên tạo ra kết quả sau:
Đầu ra
Creating Thread-1
Starting Thread-1
Creating Thread-2
Starting Thread-2
Running Thread-1
Thread: Thread-1, 10
Running Thread-2
Thread: Thread-2, 10
Thread: Thread-1, 9
Thread: Thread-2, 9
Thread: Thread-1, 8
Thread: Thread-2, 8
Thread: Thread-1, 7
Thread: Thread-2, 7
Suspending First Thread
Thread: Thread-2, 6
Thread: Thread-2, 5
Thread: Thread-2, 4
Resuming First Thread
Suspending thread Two
Thread: Thread-1, 6
Thread: Thread-1, 5
Thread: Thread-1, 4
Thread: Thread-1, 3
Resuming thread Two
Thread: Thread-2, 3
Waiting for threads to finish.
Thread: Thread-1, 2
Thread: Thread-2, 2
Thread: Thread-1, 1
Thread: Thread-2, 1
Thread Thread-1 exiting.
Thread Thread-2 exiting.
Main thread exiting.