반응형
Notice
Recent Posts
Recent Comments
Link
NOW OR NEVER
[JAVA] Thread 본문
광고
광고
반응형
Thread
- 쓰레드 : 실행중인 메소드를 쓰레드라고 말한다.
method
thread 객체 이름. start() : thread 가동
thread 객체 이름. join() : 해당 thread가 끝날 때 까지 기다리도록 한다. 결과값 나타나게 됨
멀티쓰레드
멀티쓰레드 : 두개이상의 메소드를 가능하면 공평하게 실행시키는 프로그래밍 방식을 말한다.
메소드를 호출하면 호출한 순서대로 동작한다. p1.sayHello() 모두 끝나야지만 p2에게 기회가 온다.
만약, p1의 sayHello()를 동작하다가 예외가 발생되면 중지되면 p2에게 영영 기회가 오지 않을 수도 있다.
이때가 가능하면 p1과 p2가 공평하게 어떤 기능을 동작하도록 하게 하려면 멀티쓰레드 방식으로 프로그램 일을 한다.
class Person{ String name; public Person(String name) { this.name = name; } public void sayHello() { for(int i=1; i<=10;i++) { System.out.println("Hello,"+name+"! " + i); } } } public class PersonTest { public static void main(String\[\] args) { Person p1 = new Person("김유신"); Person p2 = new Person("홍길동"); p1.sayHello(); p2.sayHello(); } }
자바에 멀티쓰레드 프로그래밍 하기
Thread클래스를 상속받아 공평하게 실행시키고 하는 일을 run메소드를 오버라이딩 하여 그 안에 써 준다.
start()메소드를 호출하여 가능하면 공평하게 일을 시킨다.
객체를 생성하여 공평하게 일을 시키는 것을 쓰레드를 가동한다라고 한다.
Runnable 인터페이스를 구현하는 클래스를 만들고 run메소드를 오버라이딩 하여 그 안에 공평하게 시키고자 하는 명령어들을 써 준다."다중상속"
class MyBall extends JPanel implmens Runnable{
}
```
- 멀티쓰레드로 되어야 한다. 자바는 클래스의 다중상속이 되지 않으므로 이때에는 Runnable인터페이스를 이용한다.
- 새로 만들려는 이미 있는 다른 클래스로 부터 상속을 받아야 하고 쓰레드를 가동 시키기 위하여 Thread 객체로 포장하여 start()를 호출해야 한다.
쓰레드에 우선순위 설정하기
setPriority(int newPriority)
우선순위에 설정할 수 있는 값은 1~10
public static final int MAX_PRIORITY 10
public static final int MIN_PRIORITY 1
public static final int NORM_PRIORITY 5
- 가능하면 일을 일찍 끝내달라고 요청하는 것이지 우선순위를 높게 설정했다고하여 반드시 그 쓰레드가 작업을 먼저 완료하는 것은 아니다
임계 영역 Critical Section
- 두 개이상의 쓰레드가 어떠한 변수를 공유하고 있을 때 동시에 두 개의 쓰레드가 접근할 수 없고 한번에 하나의 쓰레드에게만 접근하도록 하는 영역을 칭한다.
- 임계 영역에 접근하는 메소드에 sychronized 키워드를 붙이면 한번에 하나의 쓰레드만 접근하도록 lock을 걸어준다.
Thread 사이의 통신
- 쓰레드를 가동하면 가능하면 서로 공평하게 실행이 되게끔 스케쥴링을 해준다. 반드시 공평한 것은 아니다,
- 만약 공평하게 동작하도록 하려면 쓰레드 사이의 통신이 필요하다.
메소드
- 기다리고 깨워주는 쓰레드 사이의 통신을 위한 메소드 이용
- 상대방 쓰레드가 종료될 때까지 내가 기다리고 작업이 끝나면 기다리고 있는 상대방 쓰레드를 깨워준다.
- Object의 wait 메소드와 notify 메소드 이용
- wait : 다른 쓰레드가 일을 끝 마칠 때까지 기다림, 예외처리 해줘야 함
- notify : 기다리고 있던 상대방 쓰레드 깨워줌
Tips
- 그래픽을 표현하려면 paintcomponent 오버라이딩
- 움직이는 그래픽을 표현하기 위해서는 thread 사용
- y좌표는 올라가는 게 감소(-) 내려가는게 증가(+)
- Thread.sleep(50) -> 0.05초 시간 간격으로 움직임
'Back-End > JAVA' 카테고리의 다른 글
[JAVA] JDBC(Java DataBase Connection Programming) (0) | 2022.04.15 |
---|---|
[JAVA] Network Programming (0) | 2022.04.14 |
[JAVA] GUI(Graphical User Interface) (0) | 2022.04.12 |
[JAVA] 예외 처리 & Collection (0) | 2022.04.08 |
[JAVA] 상속성 & 문자열 처리 (0) | 2022.04.07 |
Comments