ctrl + alt + delete = 작업관리자
프로세스 ,스레드 <<< 자원 (리소스,cpu , 메모리(공간)을 할당받으면 O)
그 프로세스에서 실제로 일하고 있음>>스레드가!
스레드를 구현하는 하는 방법 1
//Thread 클래스를 상속 받아오기
스레드의 가장 이슈포인트는 run이다
class TestThread extends Thread {
@Override
public void run() {
for(int i=1;i<=10;i++) {
System.out.println(i+". 스레드 클래스를 상속받아 만들었습니다.");
}
}
}
public class Practice {
public static void main(String[] args) {
TestThread tt=new TestThread();
tt.start();
}
}
사용자가 더블클릭하면 스레드가 런해서 출력
스레드를 구현하는 방법 2
//인터페이스를 구현하는 방법
인터페이스는 스레드가 아니다
인터페이스를 구현하는 것만으로는 스레드라곤 할 수 없으며 진짜 스레드에 내가 만든 스레드를 넣어서 사용해야 한다
tt.start();
t.start();
스레드에서 시키는 게 아니라 프로세스에서 실행
스레드가 명령을 받는 일은 독자적인 행동
인터페이스가 나중에 실현되었지만 먼저 나올 수 있다
내부적으로 메모리가 어떻게 할당될지는 개발자가 모르는 부분
컴퓨터의 내부시스템에 달려있다.
예) 자바스크립트의 경우 , 먼저 코드를 작성해도 먼저 작성된 코드가 안 될 수도 있다.
순서를 조정할 순 없다.
왜??cpu의 영역이기 때문에
thread.sleep(1000); 그냥 시간으로 맞춤
스레드 코딩의 문제점
티켓팅 공간은 하나고
사람은 세명
티켓은 공유자원
★공유자원에 누군가 접근했다면 다른 스레드(프로세스)의 접근을 막아야 한다
공유자원에 접근할 수 있는 메서드
synchronized void pay() //동기화 설정 ★
사고가 일어나는 것을 방지할 수 있다
오버보팅등의 문제 등
class Ticketting {
static int ticket = 2;
synchronized void pay() { // 동기화 설정 ★ 중요!!
if(Ticketting.ticket<=0) {
System.out.println("티겟구매실패");
return;
}
Ticketting.ticket--;
System.out.println("티켓구매성공");
}
}
class Person implements Runnable {
Ticketting t;
Person(Ticketting t){
this.t=t;
}
@Override
public void run() {
t.pay();
}
}
public class Practice {
public static void main(String[] args) {
Ticketting t=new Ticketting();
Thread t1=new Thread(new Person(t));
Thread t2=new Thread(new Person(t));
Thread t3=new Thread(new Person(t));
t1.start();
t2.start();
t3.start();
'JAVA > 강의' 카테고리의 다른 글
JAVA 16일차~17일차 - MVC (0) | 2025.03.05 |
---|---|
JAVA 15일차 강의 -파일 입출력 (0) | 2025.03.04 |
JAVA 12일차 강의 - 다형성 (0) | 2025.02.23 |
JAVA 8일차 강의 - 클래스 (0) | 2025.02.17 |
JAVA 14일차 강의 -OOP 2부 : 예외처리와 컬렉션 프레임워크 (0) | 2025.02.01 |