Contents
컬렉션setvisible
final이니까 대문자로 표현한다. 그리고 이것은 상수 느낌의 의미
(그래서 1=어떤 의미 2= 어떤 의미 이런 식으로 정해 놨음)

그렇다면 2개를 실행해야 할 때 어떤 방법이 더 좋을까?
- main -sub1,2~ 더 좋음.,
- main가 하고, sub1가 함
어떤 게 더 좋지?
그림 그리는 메소드-메인?
람다 ~ p597
(runable꺼임. 어찌 저찌 해서)→{}요즘 이래 씀
익명?_회색 이거 쓰지만 new runnabl0()e쓰면~요즘 안 씀
데몬 스레드 : 죽지 않는 스레드(ex) while)
cpu에 메모리 달린 거 레지스터
요즘 삼성이 램에 cpu달아
thread 멈추는 법 : 교재방법보다는 상태값(ex) state)으로 true false를 걸어 멈춤
swing 쳐보면서 실력 늠
스레드가 꼭 필요한 예제
package ex16.example3;
import javax.swing.*;
public class ThreadEx03 extends JFrame {
private boolean state = true;
private int count = 0;
private int count2 = 0;
private JLabel countLabel;
private JLabel count2Label;
public ThreadEx03() {
setTitle("숫자 카운터 프로그램");
setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 레이아웃 매니저 설정
setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
// 숫자를 표시할 레이블 생성
countLabel = new JLabel("숫자1: " + count);
count2Label = new JLabel("숫자2: " + count2);
countLabel.setAlignmentX(CENTER_ALIGNMENT);
count2Label.setAlignmentX(CENTER_ALIGNMENT);
add(countLabel);
add(count2Label);
// 증가 버튼 생성
JButton increaseButton = new JButton("멈춤");
increaseButton.setAlignmentX(CENTER_ALIGNMENT);
add(increaseButton);
// 버튼에 액션 리스너 추가
increaseButton.addActionListener(e -> {
state = false;
});
setVisible(true);
new Thread(() -> {
}).start();
new Thread(() -> {
while (state) {
try {
Thread.sleep(1000);
count++;
countLabel.setText("숫자1: " + count);
} catch (InterruptedException ex) {
throw new RuntimeException(ex);
}
}
}).start();
new Thread(() -> {
while (state) {
try {
Thread.sleep(1000);
count2++;
count2Label.setText("숫자2: " + count2);
} catch (InterruptedException ex) {
throw new RuntimeException(ex);
}
}
}).start();
}
public static void main(String[] args) {
new ThreadEx03();
}
}
dip 추상적인 것에 의존한다.-v
우아한 기술 블로그
컬렉션
13장
선택정렬, 버블, 퀵솔트까진 등_주말에 2시간씩
내림차순, 오른차순
배열은 삭제 안됨.그래서 컬랙션 많이 씀?
[Vector랑 ArrayList 차이 ]_내용-v
-Vector는 동기화가 자동으로 되어있음
⇒ 동시 접근x
~ 그래서 멀티스레드에 많이 씀
+) 하지만 무조건 멀티스레드에 동기화가 필요한가?
no. 자료를 그냥 읽는 것은 동기화 안해도 됨. 같이 봐도 됨. 그렇지만 자료가 변경될 때에는 동기화가 필요.ex) account(계좌) 잔액을 그냥 read만 하는 거면 여러 명 같이 봐도 됨.
그렇지만 인출 등 변경(write)가 있을 때에는 동기화가 중요. 즉, 동시 접근하면 안됨.
-ArrayList가 동기화 x,
~그래서 단일스레드에 씀
- - - - - - - - - - - — -
데드락
resorce라는 자원이 있고 그걸 이용하는 스레드가 있음
ex) 화장실이라는 resorce가 있고 그걸 이용하는 a,b,c 사람(스레드)가 있음.
그런데 1등 a는 5초가 걸리고 2등으로 온 b는 3초, 3등 c는 1초가 걸림.
+) 화장실을 arrraylist로 보면 화장실 크기가 2이면 abc하면 5개가 됨?
(ㅊ) 화장실 2칸, abc_이 말은 abc가 화장실2칸에 들어가는 게 아니라 화장실 크기 2개 필요하고 abc담을 배열도 3개 필요하니까 5개다??)?
동시 접근을 막아야 함 >> 스케쥴링(waiting 시간을 줄이는 거)_위의 경우 abc의 웨이팅을 줄여 효율적으로 하는 것.
⇒스케쥴링 알고리즘에는 다양한 것들이 있는데
>라운드로빈 : 1초씩 하는 거(전체 1씩)
5a(1s) > 3b(1s) > c ⇒ so c는 2초만 기달리면 됨.
5a(1s) > 3b(1s) > c > 4a > 2b>3a >b>2a>a~이런 느낌쓰 초는 중요x 너무 자세하게 안알아도 됨
동시 접근을 못하게 막는 것 : 싱크로나이즈
동기화의 필요성_ 예제) Account(계좌)
aacount에 1000원이 있다고 함. 그리고 인출(withdraw)를 하려고 함. 이런 경우는 동시에 접근 시 어떻게 될까?
동시 접근이 되면 서울,부산에서 동시에 인출하면 둘 다에게 1000원이 감. → 안돼
이런 경우에는 동기화가 필요하다. 동시 접근을 막아야 한다.⇒ 데드락(아무도 선택 못하게 만듦)을 걸어야 한다.⇒ 데드락의 방법은 다양한 데 그 중의 가장 심플한 동기화를 사용한다.
*데드락을 하면 동시 접근 가능/ 데드락을 안 하면 동시 접근 x
*교착
컴퓨터가 교착 상태이다 → 프로그램이 뻗은 것임→ 방법x. 재부팅해야함
app이 갑자기 꺼진다 → 교착 상태인 경우가 많다. (메모리 부족.. 여러 이유 들로)
listener-v
actionlistener?-pg606
Share article