Java 동시성-주요 작업
Core Java는 다중 스레드 프로그램에 대한 완전한 제어를 제공합니다. 요구 사항에 따라 일시 중지, 재개 또는 완전히 중지 할 수있는 다중 스레드 프로그램을 개발할 수 있습니다. 스레드 개체에서 동작을 제어하는 데 사용할 수있는 다양한 정적 메서드가 있습니다. 다음 표에는 이러한 방법이 나열되어 있습니다.
Sr. 아니. | 방법 및 설명 |
---|---|
1 | public void suspend() 이 메서드는 스레드를 일시 중단 상태로 만들고 resume () 메서드를 사용하여 다시 시작할 수 있습니다. |
2 | public void stop() 이 메서드는 스레드를 완전히 중지합니다. |
삼 | public void resume() 이 메서드는 suspend () 메서드를 사용하여 일시 중단 된 스레드를 다시 시작합니다. |
4 | public void wait() 다른 스레드가 notify ()를 호출 할 때까지 현재 스레드가 대기하도록합니다. |
5 | public void notify() 이 개체의 모니터에서 대기중인 단일 스레드를 깨 웁니다. |
최신 버전의 Java에서는 suspend (), resume () 및 stop () 메서드를 더 이상 사용하지 않으므로 사용 가능한 대안을 사용해야합니다.
예
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.");
}
}
위의 프로그램은 다음과 같은 출력을 생성합니다-
산출
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.