2023.11.06 - [IT] - Start <명품JAVA> ArrayList
Start <명품JAVA> ArrayList
명품자바의 예제문제, 실습문제를 풀며 공부해 나갑니다. 목표는 Collection, Generic, Comparable, Comparator, Iterable, Iterator, Stream, Lambda Expression등을 공부하여 이를 활용한 몬테카를로 시뮬레이션 미니 프
rezerocodinglife.tistory.com
공부를 시작하며 작성한 글 입니다. 공부하며 사용한 자료들이 있으니 참고하시면 좋겠습니다.
2023.11.09 - [IT] - Thread / 1
<Java Backend> Thread / 1
https://rezerocodinglife.tistory.com/22 Start ArrayList 명품자바의 예제문제, 실습문제를 풀며 공부해 나갑니다. 목표는 Collection, Generic, Comparable, Comparator, Iterable, Iterator, Stream, Lambda Expression등을 공부하여 이
rezerocodinglife.tistory.com
Thread / 1 에 대한 지난 글 입니다. 참고하시면 좋겠습니다.
지난 글에 이어 Thread에 대해 글을 적어보도록 하겠습니다.
< 스레드의 우선순위 >
- Java는 1~10까지의 우선순위를 가집니다.
- 사용자가 우선순위를 부여할 수 있습니다.
- 우선순위의 Default는 5입니다.
- Thread, Process의 우선순위는 OS Scheduler가 정합니다. 때문에 사용자가 부여한 우선순위는 OS Scheduler 참고하여
우선순위를 정할 뿐, 절대적이지 않습니다.
< Thread의 I / O 블락킹(blocking) >
I/O 블랑킹(blocking) : 스레드가 (I/O) 입출력을 위해 기다리는 것.
< 사용자가 입력을 하는 구간 >
- 싱글 스레드
- 아무것도 하지 않고 입력을 기다린다.
- 멀티 스레드
- 다른 스레드를 실행한다.
<예시 코드>
package self_Thread;
import java.util.Scanner;
public class Ex13_4 {
public static void main(String[] args) {
Thread t1 = new Thread(new ThreadEx4_1());
t1.start();
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
System.out.println("insert : " + input);
}
}
class ThreadEx4_1 implements Runnable {
@Override
public void run() {
for (int i = 10; i >= 1; i--) {
System.out.println(i);
try {
Thread.sleep(1000);
} catch (Exception e) {
}
}
}
}
<실행결과>
10 9 8 7 3 insert : 3 6 5 4 3 2 1 |
< 스레드 그룹 >
- 서로 관련된 스레드를 그룹으로 묶어서 다루기 위한 것.
- 모든 스레드는 반드시 하나의 스레드 그룹에 포함되어 있어야 한다.
- 스레드 그룹을 지정하지 않고 생성한 스레드는 'main 스레드 그룹'에 속한다.
- 자신을 생성한 스레드(부모 스레드)의 그룹과 우선순위를 상속받는다.
Thread(ThreadGroup group, String name)
Thread(ThreadGroup group, Runnable target)
Thread(ThreadGroup group, Runnable target, String name)
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
ThreadGroup getThreadGroup() // 스레드 자신이 속한 스레드그룹을 반환한다
Java ThreadGroup Class의 Method
https://www.javatpoint.com/threadgroup-in-java
Threadgroup in java - javatpoint
Java Threadgroup or Threadgroup in Java with example represents a group of thread that can be operated collectively with inheritance, polymorphism, abstraction, encapsulation, exception handling, multithreading, IO Streams, Networking, String, Regex, Colle
www.javatpoint.com
< Quiz>
Quiz 1.
main Method의 코드를 보고 ThreadCounter Class를 작성하라.
package self_Thread;
public class Quiz01 {
public static void main(String[] args) {
Thread t1 = new Thread(new ThreadCounter("thread-1", 15));
Thread t2 = new Thread(new ThreadCounter("thread-2", 10));
t1.start();
t2.start();
}
}
<풀이>
package self_Thread;
public class ThreadCounter implements Runnable {
private String name;
private int maxCount;
private int count;
public ThreadCounter(String name, int maxCount) {
this.name = name;
this.maxCount = maxCount;
this.count = 0;
}
@Override
public void run() {
while (this.count < this.maxCount) {
try {
count++;
System.out.println(this.name + " : " + this.count);
Thread.sleep(1000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
}
간단한 Thread 예제입니다. Java의 Thread Class를 extends 하여 구현할 수도 있지만 Runnable Interface를 implement 하여 코드의 유연성을 높였습니다. 앞으로도 최대한 Runnable Interface를 사용할 것입니다. |
또한 ThreadCounter Class의 run() Method를 구현할 때, for 문을 대신 while 문을 사용했습니다. for 루프를 사용하면 일반적으로 미리 반복 횟수를 지정하고 루프가 일정 횟수 동안 실행됩니다. 이 경우 미리 정확한 반복 횟수를 알아야 합니다. while 루프를 사용하면 조건에 기반하여 루프의 종료를 동적으로 제어할 수 있습니다. 프로그램 실행 중에 maxCount를 동적으로 변경하거나 루프 종료를 위한 다른 조건을 사용할 수 있습니다. 따라서 while 문을 사용하면 특정 상황에서 더 많은 적응성을 제공합니다. |
'Backend' 카테고리의 다른 글
<Backend> Java / Class (2) this와 메소드 (0) | 2024.04.04 |
---|---|
<Backend> Java / Class (1) 클래스와 생성자 (0) | 2024.04.04 |
<Backend> Java / Thread (1) (2) | 2023.11.09 |
<Backend> Java / Generic 예제문제 2 (3) | 2023.11.08 |
<Backend> Java / Generic 예제문제 (2) | 2023.11.07 |