반응형
더보기
어제 배운 내용
인터페이스
추상 클래스를 구체화 시킨 것
상속x 구현 = implements
상수 (final static)& 추상메소드 를 가지고 있음
제네릭
set > 중복된 데이터 허용 X .. hash map 등 > 속도 저하
list > 배열, linked list > ArrayList (순차적)& LinkedList
쓰레드

... 사실 멀티 스레드 진행되더라도, 동시 실행x 하나만 실행(병행처리) -> HW 발전으로 동시처리 처럼 보임

- New :
- 스레드는 자바에서 API 로 제공 -> New Thread()
- Runnable :
- 스레드의 start() 메서드 호출시 -->
- 사용자는 여기까지만, 스케쥴러에 넘겨주는 작업까지만
- 스레드의 start() 메서드 호출시 -->
- Running :
- 동작 -> 스레드 스케쥴러가 진행
- run() 메서드 수행 -> @Override
- Blocked
- Running -> Runnable


스레드 상속시 run 메소드 필수
- run() 은 스케쥴러가 알아서 진행 = 스레드 아님
- 사용자는 start() 사용으로 올려주는것


join () 메서드 : 끝날때까지 기다려
class MyRunnableTwo implements Runnable {
@Override
public void run() {
System.out.println("run");
first();
}
private void first() {
System.out.println("first");
second();
}
private void second() {
System.out.println("second");
}
}
public class joinEx {
public static void main(String[] args) {
// 스레드 시작전에 스레드 호출? = main 도 스레드다
System.out.println(Thread.currentThread().getName() + " start");
Thread t = new Thread(new MyRunnableTwo());
t.start();
// 조인 안하면 메인 먼저 끝나고 스레드 실행됨
// 스레드는 별도의 프로세스, 메인과 별도
try {
t.join();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " end");
}
}



- 하나의 자원을 여러 영역이 같이 쓸 때 .. 오류발생 방지.. 명확하게 사용하기 위해
.




///


package day06;
class ATM implements Runnable {
private long depositMoney = 10000;
public void run() {
synchronized (this) {
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(10);
} catch (InterruptedException ie) {
ie.printStackTrace();
}
if (getDepositMoney() <= 0) {
break;
}
withDraw(1000);
/// 정지 대기
notify();
try {
wait(); // wait 는 try catch 와 함꼐
} catch (InterruptedException e) {
e.printStackTrace();
}
///
}
}
}
public void withDraw(int howMuch) {
if (getDepositMoney() > 0) {
depositMoney -= howMuch;
System.out.print(Thread.currentThread().getName() + " , ");
System.out.printf("money : %d %n", getDepositMoney());
} else {
System.out.println(Thread.currentThread().getName() + " ,");
System.out.println("out.");
}
}
public long getDepositMoney() {
return depositMoney;
}
}
public class SynchronizedEx {
public static void main(String[] args) {
ATM atm = new ATM();
Thread mother = new Thread(atm, " mother ");
Thread son = new Thread(atm, " son ");
mother.start();
son.start();
}
}
반응형
'강의정리들 > [2023] FullStack' 카테고리의 다른 글
230101_Thu (0) | 2023.01.12 |
---|---|
230101_Wed_2 (0) | 2023.01.11 |
230110_Tue (0) | 2023.01.10 |
230109_Mon (0) | 2023.01.09 |
230106_Fri (0) | 2023.01.06 |
반응형
더보기
어제 배운 내용
인터페이스
추상 클래스를 구체화 시킨 것
상속x 구현 = implements
상수 (final static)& 추상메소드 를 가지고 있음
제네릭
set > 중복된 데이터 허용 X .. hash map 등 > 속도 저하
list > 배열, linked list > ArrayList (순차적)& LinkedList
쓰레드

... 사실 멀티 스레드 진행되더라도, 동시 실행x 하나만 실행(병행처리) -> HW 발전으로 동시처리 처럼 보임

- New :
- 스레드는 자바에서 API 로 제공 -> New Thread()
- Runnable :
- 스레드의 start() 메서드 호출시 -->
- 사용자는 여기까지만, 스케쥴러에 넘겨주는 작업까지만
- 스레드의 start() 메서드 호출시 -->
- Running :
- 동작 -> 스레드 스케쥴러가 진행
- run() 메서드 수행 -> @Override
- Blocked
- Running -> Runnable


스레드 상속시 run 메소드 필수
- run() 은 스케쥴러가 알아서 진행 = 스레드 아님
- 사용자는 start() 사용으로 올려주는것


join () 메서드 : 끝날때까지 기다려
class MyRunnableTwo implements Runnable {
@Override
public void run() {
System.out.println("run");
first();
}
private void first() {
System.out.println("first");
second();
}
private void second() {
System.out.println("second");
}
}
public class joinEx {
public static void main(String[] args) {
// 스레드 시작전에 스레드 호출? = main 도 스레드다
System.out.println(Thread.currentThread().getName() + " start");
Thread t = new Thread(new MyRunnableTwo());
t.start();
// 조인 안하면 메인 먼저 끝나고 스레드 실행됨
// 스레드는 별도의 프로세스, 메인과 별도
try {
t.join();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " end");
}
}



- 하나의 자원을 여러 영역이 같이 쓸 때 .. 오류발생 방지.. 명확하게 사용하기 위해
.




///


package day06;
class ATM implements Runnable {
private long depositMoney = 10000;
public void run() {
synchronized (this) {
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(10);
} catch (InterruptedException ie) {
ie.printStackTrace();
}
if (getDepositMoney() <= 0) {
break;
}
withDraw(1000);
/// 정지 대기
notify();
try {
wait(); // wait 는 try catch 와 함꼐
} catch (InterruptedException e) {
e.printStackTrace();
}
///
}
}
}
public void withDraw(int howMuch) {
if (getDepositMoney() > 0) {
depositMoney -= howMuch;
System.out.print(Thread.currentThread().getName() + " , ");
System.out.printf("money : %d %n", getDepositMoney());
} else {
System.out.println(Thread.currentThread().getName() + " ,");
System.out.println("out.");
}
}
public long getDepositMoney() {
return depositMoney;
}
}
public class SynchronizedEx {
public static void main(String[] args) {
ATM atm = new ATM();
Thread mother = new Thread(atm, " mother ");
Thread son = new Thread(atm, " son ");
mother.start();
son.start();
}
}
반응형
'강의정리들 > [2023] FullStack' 카테고리의 다른 글
230101_Thu (0) | 2023.01.12 |
---|---|
230101_Wed_2 (0) | 2023.01.11 |
230110_Tue (0) | 2023.01.10 |
230109_Mon (0) | 2023.01.09 |
230106_Fri (0) | 2023.01.06 |