Java 17일차 4(람다)
2022. 12. 2. 11:45ㆍ코딩배움일지/JAVA
Runnable 람다.
public class Main1 {
public static void main(String[] args) {
int a = 10;
Runnable application1 = (/*매개변수를 주지 않았다*//*매개변수가 없기때문에 괄호 생략 불가. 하나 있을때만 생략가능*/) -> { /*메소드 안에서 메소드를 정의*/ /*메소드 정의하는 부분*/
System.out.println("프로그램을 시작합니다.");
System.out.println("a:" + a);
};
application1.run();
Runnable timer = () -> {
for(int i =0; i<100; i++) {
try {
System.out.println(i + " : " + (i+1));
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
Thread t1 = new Thread(timer);
Thread t2 = new Thread(timer);
t1.start()/*run메소드 실행*/; /*실행문을 던지고*/
t2.start(); /*비 동기처리*//*여기로 온다.*/
}
}
메인문 하나도 thread 이다.
하나의 프로그램은 하나의 프로세서
하나의 프로세서 안에는 Thread 가 여러개 있다.
입력받는 기능 따로. 채팅하는 기능 따로. 하지만 하나의 프로그램에서 동시에 작동중이다.
싱글스레드 직렬처리 하나의 업무 하나의 처리 싱글코어
다중 스레드 병렬 처리 하나의 업무 분산처리 멀티코어 16코어면 동시에 처리해 줄 수 있는 직원이 16명
운영체제 자체가 멀티 스레드
thread 는 Runnable 매개변수로 인터페이스를 구현한다.
thread 는 start() 가지고 있다,.
start() 메소드는 Runnable . run()을 호출 한다.
웹서버는 자체적으로 멀티스레드
죽지않고 돌고 있다.
하나하나의 클라이언트를 멀티스레드로 처리해서 화면에 출력
스레드를 사용할 수 없는 환경
http 단방향 웹은 요청해야 보여줌
비동기 처리는 둘의 순서를 보장 할 수 없다.
프로세스란
- 프로세스는 실행중인 프로그램을 의미한다
- 프로세스는 완전히 독립적인 수행단위이다
스레드란
- 스레드는 프로그램 내에서 실행되는 프로그램 제어 흐름(실행단위)을 말한다
- 한 프로그램에 여러개의 스레드가 존재할 수 있다. 스레드가 1개라면 단일스레드, 2개이상이라면 다중스레드
- 프로그램 코드를 한 줄씩 실행하는 것이 스레드의 역할이다 (=실행제어)
- 스레드란 곧 프로그램을 실행하는 주체이다
- 스레드를 보통 가벼운 프로세스(light-process)라고 표현한다
멀티스레드란
- 멀티스레드 =multi thread =다중스레드
- 멀티스레드는 여러개의 스레드를 이용하는 프로그램이다
- 다중 스레드에서 각각의 스레드는 하나의 독립적인 프로세스처럼 작업 수행
public class Main1 {
public static void main(String[] args) {
int a = 10;
Runnable application1 = (/*매개변수를 주지 않았다*//*매개변수가 없기때문에 괄호 생략 불가. 하나 있을때만 생략가능*/) -> { /*메소드 안에서 메소드를 정의*/ /*메소드 정의하는 부분*/
System.out.println("프로그램을 시작합니다.");
System.out.println("a:" + a);
};
application1.run();
// Runnable timer = () -> {
// for(int i =0; i<100; i++) {
// try {
// System.out.println(i + " : " + (i+1));
// Thread.sleep(1000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// }
// };
Thread t1 = new Thread(() -> {
for(int i =0; i<100; i++) {
try {
System.out.println("채팅기능");
System.out.println(i + " : " + (i+1));
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
Thread t2 = new Thread(() -> {
for(int i =0; i<100; i++) {
try {
System.out.println("알림기능");
System.out.println(i + " : " + (i+1));
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t1.start();/*run메소드 실행*/ /*실행문을 던지고*/
t2.start(); /*여기로 온다.*/ /*비동기 처리*/ /*비동기 처리를 해야할때와 안해야 할때를 알고 사용해야한다.*/
}
}
'코딩배움일지 > JAVA' 카테고리의 다른 글
Java 17일차 4-2(람다) (0) | 2022.12.02 |
---|---|
Java 17일차 4-1(람다) (0) | 2022.12.02 |
Java 17일차 3(람다) (0) | 2022.12.02 |
Java 17일차 2(익명클래스) (0) | 2022.12.02 |
Java 17일차 1(예외 미루기) (0) | 2022.12.02 |