반응형
Thread
Thread
- 메모리를 할당받아 실행중인 프로그램을 프로세스라고 한다.
- 프로세스 내의 명력어 블록으로 시적점과 종료점을 가진다.
- 실행중 멈출수 있으며 동시에 수행 가능하다.
- 프로세스 내에서 실해되는 흐름의 단위
Thread 예제1
package D11;
import java.util.ArrayList;
class BeforeThread extends Thread{
public BeforeThread (String name) {
super(name);
}
private void addCar() {
System.out.println("addCar");
ThreadEx1.carList.add("그랜져");
ThreadEx1.carList.add("소나타");
ThreadEx1.carList.add("EV6");
ThreadEx1.carList.add("QM6");
}
@Override
public void run() {
System.out.println(currentThread().getName()+"실행");
try {
sleep(1000);
}catch(InterruptedException e) {
e.printStackTrace();
}
addCar();
}
}
class AfterThread extends Thread{
public AfterThread(String name) {
super(name);
}
@Override
public void run() {
System.out.println(currentThread().getName()+"실행");
ArrayList<String> carList=ThreadEx1.carList;
for(int i=0; i<carList.size(); i++) {
System.out.println(carList.get(i));
}
}
}
public class ThreadEx1 {
public static ArrayList<String> carList = new ArrayList<String>();
public static void main(String[] args) {
BeforeThread bt = new BeforeThread("beforeThread");
AfterThread at = new AfterThread("afterThread");
bt.start();
try {
bt.join();
}catch(InterruptedException e) {
e.printStackTrace();
}
at.start();
}
}
직접 상속받아 스레드를 생성하거나 Runnable 인터페이스를 구현해서 생성한다.
Thread 예제2
**package D11;
class FirstThread extends Thread{
public FirstThread (String name) {
super(name);
}
@Override
public void run() {
for(int i=0; i<15; i++) {
System.out.println(currentThread().getName());
}
}
}
class SecondThread extends Thread{
public SecondThread (String name) {
super(name);
}
@Override
public void run() {
for(int i=0; i<15; i++) {
System.out.println(currentThread().getName());
}
}
}
public class ThreadEx2 {
public static void main(String[] args) {
FirstThread ft = new FirstThread("중요한 작업");
SecondThread st = new SecondThread("덜중요한 작업");
ft.setPriority(Thread.MAX_PRIORITY); //우선순위 설정
st.setPriority(Thread.MIN_PRIORITY);
ft.start();
st.start();
}
}**
First, Second 등으로 우선순위를 성정할수 있다.
Multi Thread
여러개의 쓰레드를 사용하는것
Thread.sleep()
현재 쓰레드가 일정 기간동안 실행을 중지시킨다.
어플리케이션 또는 시스템 상에서 돌고있는 다른 어플리케이션 내의 다른 쓰레드들에게 프로세스를 이용 가능하도록 만들기 위한 효율적인 방법이다.
또는 속도를 조절하거나 대기요건이 용납되는 임무를 가진 다른 쓰레드를 기다리기 위해서 사용하기도 한다.
Interrupts
쓰레드에게 하던 것을 멈추고 다른것을 하라는 지시이다.
쓰레드는 인터럽트 대상의 다른 쓰레드 객체 상대로 interrupts(); 메소드를 호출함으로써 인터럽트를 보냅니다.
인터럽트 메커니즘이 정확하기 동작하기 위해서는 인터럽트 대상 쓰레드가 스스로 인터럽트를 지원해줘야 합니다.
Thread.join()
쓰레드가 종료될 때까지 기다릴 때 Thread.join()을 사용한다.
쓰레드 A는 쓰레드 B에게 어떤 작업을 실행시키고 완료될때까지 기다려야 할 때 join()을 호출하면 A는 B가 종료 될때까지 기다린다.
반응형
'JAVA' 카테고리의 다른 글
[JAVA] 예외처리(try - catch) (0) | 2023.07.19 |
---|---|
[JAVA] Beep (0) | 2023.07.19 |
[JAVA] Collection(Map) (0) | 2023.07.19 |
[JAVA] Collection(Stack) (0) | 2023.07.18 |
[JAVA] Collection(Queue) (0) | 2023.07.18 |