HashMap
HashMap에 넣을 요소는 기본 데이터 타입 뿐만 아니라
클래스를 넣을 수 있다.
Thread
메인과 동시에 돌리고 싶은 메서드가 있다면
사용하는 클래스다.
implements Runnable
위의 인터페이스를 클래스에 구현 한 뒤
run 메서드를 정의해준다.
Thread 객체명 = new Thread(관리할 클래스 객체명);
객체명.start;
.start 메서드를 통해 Runnable 인터페이스의
.run 메서드를 실행시킨다.
그러면 클래스의 메서드와 메인이 동시에 출력된다.
(원래 클래스의 메서드를 호출하면 메인의 진행이 잠시
그 자리에 멈춰있다가 메서드가 끝나고 다시 진행된다.)
extends Thread
클래스에서 Thread를 상속 받고 해당 클래스에
run메서드를 정의 해준뒤
메인에서 .start 메서드를 호출하면 동시 진행이
가능하게된다.
try {
Thread.sleep(1000); //1000=1초
} catch (InterruptedException e) {
e.printStackTrace();
}
Thread 클래스의 자체 메서드 sleep
long타입의 데이터를 넣을 수 있으며 1000당 1초씩
멈추었다가 진행한다. 에러가 날 수 있기 때문에
try/catch를 통해 예외처리를 반드시 해야한다.
Thread 클래스를 직접 상속 받은 경우에는
굳이 Thread를 통해 호출하지 않아도 된다.
Thread의 우선순위
순위가 1~10이라고 가정했을때 Thread의 디폴트 순위는
5위정도이다.
.setPriority( ) 를 통해 우선 순위를 바꿔줄 수 있고
괄호 안의 숫자가 커질수록 우선순위가 올라간다.
우선순위가 올라간다고 꼭 먼저 나오는것은 아니고
먼저 나올 가능성이 올라간다고 할 수 있다.
멀티스레드
두개이상의 메서드를 Thread를 통해
동시 진행 하는것을 말한다,
데몬 스레드 (daemon thread)
다른 일반 스레드의 작업을 돕는 보조적인
역할을 수행하는 스레드
class DaemonTest extends Thread{
public void run() {
while(true) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(Ex10_05_데몬스레드.autoSave) {
autoSave();
}
}
}
public void autoSave() {
System.out.println("작업화일이 자동저장되었습니다.");
}
}
public class Ex10_05_데몬스레드 {
static boolean autoSave = false;
public static void main(String[] args) {
DaemonTest t=new DaemonTest();
t.setDaemon(true);
t.start();
for(int i=1;i<=20;i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(i);
if(i==5)
autoSave = true;
}
System.out.println("프로그램을 종료합니다.");
}
}
.setDaemon(true); 10_05참고
Thread를 상속받은 클래스를 데몬스레드로 동작하게
하는 명령어 .start();를 통해 작동하게 한다.
주 스레드가 끝나면 데몬스레드는 같이 종료된다.
동기화 Synchronization
멀티스레드는 공유자원을 임계영역에서 동시에
작업하고 있기때문에 제대로 명령어를 수행하지
못할 수있는 등의 문제가 있다.
synchronized를 통해 서로 방해받지 않게 차례대로
수행할 수 있게 동기화를 시켜줄 수 있다.
사용법은 두가지가 있는데
1. 메소드의 접근제어자 뒤에 작성하기
2. 메소드 안쪽에서 명령어를 synchronized로 감싸기
(synchronized (메인 클래스의 공유자원) {)
'Develop > JAVA' 카테고리의 다른 글
0609 JAVA 열여섯번째... (0) | 2022.06.10 |
---|---|
0607 JAVA 열네번째 공부 정리~ (0) | 2022.06.10 |
0602 JAVA 열두번째~ (0) | 2022.06.02 |
0531 JAVA 열한번째 (0) | 2022.06.01 |
0530 JAVA 열번째!! (0) | 2022.06.01 |