일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 자바
- 자바스크립트
- 깃허브
- 셋업
- 오라클
- jsp 내부객체
- Oracle
- 제이쿼리
- 설치
- 깃허브 간단요약
- 필터체인
- html
- 스프링
- Eclipse
- SESSION
- java
- springboot
- 이클립스
- 면접
- 버튼
- jsp
- Spring
- 알고리즘
- EL태그
- 설정
- jquery
- 폼태그
- 마이바티스
- jstl
- MySQL
- Today
- Total
은은하게 코드 뿌시기
스레드 기초 및 예제 본문
* 스레드 구현 방법
1) Thread 클래스 상속 : Thread 클래스 상속시, 다른 클래스 상속받을수 없음 참고
2) Runnable 인터페이스 구현 : 오로지 run만 정의 되어잇는 인터페이스
static Thread currentThread : 현재 실행중인 쓰레드의 참조를 반환한다. String getname : 스레드의 이름을 반환 |
* 한번 실행이 종료된 쓰레드는 다시 실행할수 었다. start()가 한번만 호출 가능.
재실행시에는 새로 생성하여 실행 해야한다.
* 스레드 진행순서
1) main 메서드에서 쓰레드의 start를 호출
2) start() 는 새로운 쓰레드를 생성, 쓰레드가 작업하는데 사용될 호출스택을 별도로 생성
3) 새로 생성된 호출 스택에 run()이 호출되어, 쓰레드가 독립된 공간에서 작업을 수행한다.
4) 이제는 호출스택이 2개이므로 스케줄러가 정한 순서에 의해 번갈아 가면서 실행된다.
*쓰레드가 둘 이상 일때는 호출 스택의 최상위에 있는 메서드 일지라도 대기상태에 있을 수 있다.
*main쓰레드 : main메서드의 작업을 수행하는 것도 쓰레드이며, 이를 main쓰레드라고한다.
실행중인 사용자 쓰레드가 하나도 없을때 프로그램은 종료된다.
* 싱글 쓰레드 : 한작업을 마친다음, 다음작업 수행.한가지 자원을 놓고 두쓰레드가 경쟁할때는 불리.
* 멀티 쓰레드 : 서로다른 자원을 동시에 진행할때 유리, 프로세스 스위칭 싱글쓰레드보다 더 많이 발생.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
package kr.co.obj;
public class ThreadTest01 {
public static void main(String[] args) {
DigitThread t1 = new DigitThread();
Runnable n1 = new NameThread(); //클래스 다형성
t1.start(); //extend thread
Thread t2 = new Thread(n1);//interface thread
t2.start();
for(char ch = 'A'; ch <= 'Z'; ch++) {
System.out.print(ch);
try {
Thread.sleep(1000); // 일초동안 딜레이
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//------------------------------------------------------------------------------------
public class DigitThread extends Thread{
public void run() {
for(int cnt=0; cnt<10; cnt++) {
System.out.print(cnt);
System.out.println(getName()); //get name : 스레드의 이름을 반환한다.
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//------------------------------------------------------------------------------------
public class NameThread implements Runnable {
@Override
public void run() {
for(int i = 0; i <= 9 ; i++) {
System.out.print("👩👩ヾ(≧▽≦*)o ");
//인터페이스 멤버가 run함수 밖에 없음으로 다음과같이 사용.
System.out.println(Thread.currentThread().getName());
// currentThread : 현재 실행중인 스레드의 참조를 반환한다. try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
|
cs |
* start 를 호출해야 쓰레드 생성, 생성된 쓰레드에 작업 완료.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
package kr.co.threadtest;
public class ThreadEx2 {
public static void main(String[] args) {
ThreadEx2_1 t1 = new ThreadEx2_1();
t1.start(); //쓰레드 생성됨
//main쓰레드 종료
}
}
class ThreadEx2_1 extends Thread{
public void run(){
throwException();
}
public void throwException() {
try {
throw new Exception(); // 고의로 예외 발생
} catch (Exception e) {
e.printStackTrace();
}
}
}
|
cs |
* run만 생성시 쓰레드 미생성. main쓰레드에서 진행.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
package kr.co.threadtest;
public class ThreadEx3 {
public static void main(String[] args) {
ThreadEx3_1 t1 = new ThreadEx3_1();
t1.run(); //쓰레드가 생성 되지 않음. main쓰레드에서 실행
}
}
class ThreadEx3_1 extends Thread{
public void run() {
throwExeption();
}
public void throwExeption() {
try {
throw new Exception();
} catch (Exception e) {
e.printStackTrace();
}
}
}
|
cs |
* 멀티쓰레드 다른 자원 사용시! 다이얼로그와 콘솔이 동시에 사용 되는 것을 볼수 있음
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
package kr.co.threadtest;
import javax.swing.JOptionPane;
public class ThreadEx7 {
public static void main(String[] args) {
ThreadEx7_1 t1 = new ThreadEx7_1();
t1.start();
String input = JOptionPane.showInputDialog("아무거나 입력하세용");
System.out.println("입력한값은 " + input + "입니다.");
}
}
class ThreadEx7_1 extends Thread{
@Override
public void run() {
for(int i=10;i>0;i--) {
System.out.println(i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
|
cs |
'자바 > 자바 기본' 카테고리의 다른 글
쓰레드 그룹(thread group) (0) | 2022.07.06 |
---|---|
쓰레드 우선순위 (0) | 2022.07.05 |
JAVA SQL DB 연동 소스 예제 (0) | 2022.06.27 |
JAVA execute, executeQuery, executeUpdate (0) | 2022.06.27 |
자바 JAVA FILE COPY 파일 복사/수정 간단 예제 (0) | 2022.06.17 |