일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 프로그래밍
- 테이블
- 프로젝트
- 객제지향
- 코딩
- squery
- CSS
- html
- jsp
- javascript
- 웹프로그래밍
- 객체지향프로그래밍
- 웹
- 데이터베이스
- 공부를열심히
- Oracle
- 객체지향
- sql
- Project
- 공부
- 오라클
- 객제지향프로그래밍
- 자바
- web
- 주말이다..
- UI
- DB
- Java
- orcle
- ERWin
Archives
- Today
- Total
햄찌개
JAVA- Thread -싱글,멀티 본문
Thread
- 스레드(Thread)란 프로그램의 실행 흐름을 의미함.
- 프로세스 내에서 실행되는 세부 작업 단위이다.
- 하나의 프로세스 내에는 여러 개의 쓰레드가 존재할 수 있다.
- 경량화(lightweight) 프로세스라고도 부른다. - 두 개 이상의 스레드를 멀티스레드라고 부른다.
Thread의 특징 ( VS Process )
(1) 프로세스에 비해 문맥교환(Context Switching) 시간이 적게 걸린다.
(2) 스레드는 동료 쓰레드와 사용메모리를 공유할 수 있다.
(3) 스레드간의 통신은 프로세스간의 통신에 비해 시간이 적게 걸린다(빠르다).
(4) 스레드는 프로세스에 비해 생성 및 종료 시간이 적게 걸린다(빠르다).
(5) 스레드는 동료 쓰레드와 사용메모리를 공유할 수 있다
싱글 쓰레드
public class T01_ThreadTest {
public static void main(String[] args) {
//싱글 쓰래드 프로그램
for (int i = 0; i < 200; i++) {
System.out.print("*");
}
System.out.println();
for (int i = 0; i < 200; i++) {
System.out.print("$");
}
}
}
멀티 쓰레드
public class T02_ThreadTest {
public static void main(String[] args) {
//멀티쓰레드 프로그램 방식
/*
방법 1 : Thread클래스를 상속한 class의 인스턴스를 생성한 후
이 인스턴스의 start()메서드를 호출한다.
*/
MyThread1 th1 = new MyThread1();
th1.start();
/*
방법 2 : Runnable인터페이스를 구현한 class의 인스턴스를 생성한후
이 인스턴스를 Thread객체의 인스턴스를 생성할 때 생성자의 매개변수로 넘겨준다.
이 때 생성된 Thread객체의 인스턴스의 start()메서드를 호출한다.
*/
MyThrread2 r1 = new MyThrread2();
Thread th2 = new Thread(r1);
th2.start();
/*
방법 3 : 익명 클래스를 이용하는 방법
Runnable인터페이스를 구현한 익명클래스를 Thread인스턴스를 생성할 때 매개변수로 넘겨준다.
*/
Thread th3 = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 1; i <= 200; i++) {
System.out.print("련 ");
try {
// Thread.sleep(시간) => 주어진 시간동안 작업을 잠시 멈춘다.
// 시간은 밀리세컨드 단위를 사용한다.
// 즉, 1000ms 는 1초를 의미한다
Thread.sleep(102);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
th3.start();
}
}
class MyThread1 extends Thread {
@Override
public void run() { // thread클래스의 main 같은 역할을 하는 것이 run
for (int i = 1; i <= 200; i++) {
System.out.print("바");
try {
// Thread.sleep(시간) => 주어진 시간동안 작업을 잠시 멈춘다.
// 시간은 밀리세컨드 단위를 사용한다.
// 즉, 1000ms 는 1초를 의미한다
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class MyThrread2 implements Runnable {
@Override
public void run() {
for (int i = 1; i <= 200; i++) {
System.out.print("보");
try {
// Thread.sleep(시간) => 주어진 시간동안 작업을 잠시 멈춘다.
// 시간은 밀리세컨드 단위를 사용한다.
// 즉, 1000ms 는 1초를 의미한다
Thread.sleep(101);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
'고급 JAVA' 카테고리의 다른 글
JAVA - 단일, 멀티 쓰레드 (0) | 2020.09.23 |
---|---|
JAVA - 쓰레드 수행시간 체크 (0) | 2020.09.23 |
JAVA - Lambda식 (0) | 2020.09.21 |
JAVA - annotation (0) | 2020.09.18 |
JAVA - reflection (0) | 2020.09.18 |