프로그래밍/JAVA 24

(복습) static

static은 '클래스의' 또는 '공통적인' 의 의미를 가지고 있다. 멤버변수 - 모든 인스턴스에 공통적으로 사용되는 클래스 변수가 된다. - 클래스 변수는 인스턴스를 생성하지 않고도 사용 가능하다. - 클래스가 메모리에 로드될 때 생성된다. 메서드 - 인스턴스를 생성하지 않고도 호출이 가능한 클래스 메서드(static 메서드)가 된다. - static 메서드 내에서는 인스턴스 멤버(인스턴스 메서드, 인스턴스 변수)들을 직접 사용할 수 없다. 사용 - 클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙인다. - 메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려한다.(메서드 호출시간이 짧아지므로 성능이 향상된다.) class Stati..

프로세스와 쓰레드 2

프로세스 운영체제가 프로그램에 메모리를 할당하여 실행하는 것이 프로세스 각각 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당 받는다. 쓰레드 프로세스 내에서 실행되는 흐름의 단위로 하나의 프로세스는 하나 이상의 쓰레드를 갖는다. 같은 프로세스의 쓰레드는 메모리를 공유한다. 쓰레드는 프로세스 내에서 각각 Stack만 할당받고, Code, Data, Heap 영역은 공유한다. 자바에서 쓰레드 스케줄링은 JVM에 의해 이루어진다. 멀티 프로세스 대신 멀티 쓰레드를 사용하는 이유? 자원 효율성 증대 - 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리 - 시스템자원 소모가 줄어들게 됨 처리 비용 감소 및 응답 시간 단축 - 프로세스 간의 통신보다 쓰레드 간의..

쓰레드 wait()과 notify()

synchronized로 동기화해서 공유 데이터를 보호하는 것 까지는 좋은데, 특정 쓰레드가 객체의 락을 가진 상태로 오랜 시간을 보내지 않도록 하는 것도 중요 동기화된 임계 영역의 코드를 수행하다가 작업을 더 이상 진행할 상황이 아니면, 일단 wait()을 호출하여 쓰레드가 락을 반납하고, 기다리게 한다. 나중에 작업을 진행할 수 있는 상황이 되면 notify()를 호출해서, 작업을 중단했던 쓰레드가 다시 락을 얻어 작업을 진행할 수 있게 한다. import java.util.ArrayList; class BurgerShop { String[] burger = {"burger1", "burger2", "burger3"}; private ArrayList burgerList = new ArrayList(..

쓰레드의 동기화

멀티쓰레드 프로세스의 경우 여러 쓰레드가 같은 프로세스 내의 자원을 공유해서 작업하기 때문에 서로의 작업에 영향을 주게 된다. 한 쓰레드가 특정 작업을 끝마치기 전까지 다른 쓰레드에 의해 방해 받지 않도록 하는 것이 필요하다. 따라서 필요한 것이 임계 영역(critical section)과 잠금이다. 한 쓰레드가 진행 중인 작업을 다른 쓰레드가 간섭하지 못하도록 막는 것을 쓰레드의 동기화(synchronization) 라고 한다. 메서드 전체 synchronized class Sync_test implements Runnable { Account ac = new Account(); @Override public void run() { while (ac.getBalance() > 0) { int money..

쓰레드 상태 및 과정

쓰레드 상태 - NEW : 쓰레드가 생성되고 아직 start()가 호출되지 않은 상태 - RUNNABLE : 실행 중 또는 실행 가능한 상태 - BLOCKED : 동기화블럭에 의해서 일시정지된 상태(lock이 풀릴 때까지 기다리는 상태) - WAITING, TIMED_WAITING : 쓰레드의 작업이 종료되지는 않았지만 실행가능하지 않은(nurunnable) 일시정지상태. TIMED_WAITING은 일시정지시간이 지정된 경우를 의미 - TERMINATED : 쓰레드의 작업이 종료된 상태 쓰레드 과정

프로세스와 쓰레드(이해와 구현)

프로세스 - 프로세스는 실행중인 프로그램으로 프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)을 항당받아 프로세스가 된다. 쓰레드 - 프로세스는 프로그램을 수행하는데 필요한 데이터와 메모리 등의 자원 그리고 쓰레드로 구성되어 있으며 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것이 쓰레드이다. 멀티쓰레딩 장점과 단점 - 장점 1. cpu 사용률 향상 2. 자원을 효율적으로 사용 3. 사용자에 대한 응답성 향상 4. 작업이 분리되어 코드가 간결 - 단점 1. 프로세스 내에서 자원을 공유하면서 작업하기 때문에 동기화 문제가 발생할 수 있음 2. 교착상태(두 쓰레드가 자원을 점유한 상태에서 서로 상대편이 점유한 자원을 사용하려고 기다리느라 진행이 멈춰있는 상태)가 발생할 수 있음 쓰레드 구현 방..

JAVA char <-> String 변환

char -> String으로 변환 1. Character.toString(char데이터) - 값이 null 이면 NullPointerException 발생 2. String.valueOf(char데이터) - 값이 null이면 null로 반환 3. char데이터 + "" String -> char으로 변환 1. String데이터.toCharArray() - 배열로 반환 2. String데이터.charAt(index) - 특정 글자 반환 public class ExCharString { public static void main(String[] args) { char ch = 'A'; String s1 = Character.toString(ch); //값이 null이면 NullPointerException..