스레드의 객체는 스레드와 흐름을 가지는 스레드 2개의 객체를 가지고 있다. <- 내용 확인하기 ㅎㅎ...
객체를 할당받는 방법(면접 팁)
1. 프로토 타입 방식 : 내가 필요할 때마다 객체를 만들어서 할당받는 방식. (new)
2. 싱글턴 : 객체가 이미 만들어져 있고 만들어있는 것을 제공받는 형식.(재활용하는 방식)
ㄴ Calendar가 싱글턴 방식의 대표.
// 싱글턴은 getInstance()메소드를 호출한다.
종속 스레드 : 메인이 끝나면 끝남/ 메인이 끝나도 jvm이 스레드를 수거하는 동안 종속 스레드는 돌아감.
##.setDaemon(true);
##.isDaemon() : 너 데몬이니?
독립 스레드 : 주 스레드로부터 파생되지만 주스 레드와 별개로 활동
메인이 끝나도 구동됨 (ex. 음악 프로그램을 끈다해도 백그라운드로 계속 재생됨)
package day23;
class ThreadA extends Thread{
public void run() {
System.out.println("**ThreadA의 시작**");
for(int i=1;i<=50;i++) {
System.out.println("**ThreadA의 값:"+i+"**");
}
System.out.println("**ThreadA의 끝**");
}
}
public class ThreadTest {
public static void main(String[] args) {
ThreadA ta = new ThreadA();
ta.setDaemon(true);
ta.start(); //독립스레드.
System.out.println("너 데몬이니?"+ta.isDaemon());
System.out.println("==main의 시작==");
for(int i=1;i<=10;i++) {
System.out.println("==메인의 값"+i+" ==");
}
System.out.println("==main의 끝==");
}
}
[스레드 동기화]
1. Static변수를 이용하기
2. 동기화할 대상들을 referense로 주소값을 공유
스레드는 분산 처리 기법.
- 길이 독립적으로 구현되어있음. 특정 데이터를 공유할때 충돌이 발생한다.
직렬화 하기 : (줄을 세우기 ) synchronized
장점 : 논리적인 오류에서 벗어날 수 있음.
단점 : 분산처리 하는 이유는 빨리 처리하려고 하는 건데 직렬화를 하면 순서대로 가야 하기 때문에 속도 저하가 일어남.
package day23;
class Bank{
private int money;
synchronized public void bSave(String name, int money) {
this.money = money+this.money;
System.out.println(name+"가"+money+"원을 입금하여"+this.money+"원 잔액이 남았습니다.");
}
synchronized public void bLoad(String name, int money){
if(this.money<money) {
System.out.println("잔액이 부족합니다.");
return;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.money = this.money-money;
System.out.println(name+"가"+money+"원을 출금하여"+this.money+"원 잔액이 남았습니다.");
}
}
class Parent extends Thread{
String name;
Bank bank;
public Parent() {
}
public Parent(String name,Bank bank) {
this.name = name;
this.bank = bank;
}
@Override
public void run() {
for(int i = 0;i<=5;i++) {
int save = (int)(Math.random()*5+1)*100;
int load = (int)(Math.random()*5+1)*100;
bank.bSave(name, save);
bank.bLoad(name, load);
}
}
}
public class ThreadTest2 {
public static void main(String[] args) {
Bank b = new Bank();
Parent mama = new Parent("엄마",b);
Parent papa = new Parent("아빠",b);
mama.start();
papa.start();
}
}'개발자 > 백엔드 웹 개발자 과정(국비)' 카테고리의 다른 글
| [DB]특정 데이터 추출,SQL함수 (0) | 2022.12.13 |
|---|---|
| [DB] 데이터 베이스,SQL,물리/논리 (0) | 2022.12.12 |
| 2022년 12월 08일 _ 22회차 (Thread 스레드) (0) | 2022.12.08 |
| 2022년 12월 07일 _ 21회차 (collection, generic,vector,hashtable) (0) | 2022.12.07 |
| 2022년 12월 02일 _ 20회차 (String 클래스) (0) | 2022.12.02 |