본문 바로가기

Java44

[Java] Thread(쓰레드) - 5 1. 쓰레드 동기화 싱글 쓰레드 프로세스의 경우 프로세스 내에서 단 하나의 쓰레드만 작업하기 때문에 프로세스의 자원을 가지고 작업하는데 별 문제가 없지만, 멀티 쓰레드 프로세스의 경우 여러 쓰레드가 같은 프로세스 내의 자원을 공유해서 작업하기 때문에 서로의 작업에 영향을 주게된다. 만일 쓰레드A가 작업하던 도중에 다른 쓰레드B에게 제어권이 넘어갔을 때 , 쓰레드 A가 작업하던 공유 데이터를 쓰레드 B가 임의로 변경하였다면, 다시 쓰레드 A가 제어권을 받아서 나머지 작업을 마쳤을 때 원래 의도하던 것과는 다른 결과를 얻을 수 있다. 이러한 일이 발생하는 것을 막기 위해서 한 쓰레드가 특정 작업을 끝마치기 전까지 다른 쓰레드에 의해 방해받지 않도록 하는 것이 필요하다. 그래서 도입된 개념이 바로 '임계 영역.. 2022. 6. 2.
[Java] Thread(쓰레드) - 4 1. 데몬 쓰레드 데몬 쓰레드는 다른 일반 쓰레드의 작업을 돕는 보조적인 역할을 수행하는 쓰레드이다. 일반 쓰레드가 모두 종료되면 데몬 쓰레드는 강제적으로 자동 종료되는데, 그 이유는 데몬 쓰레드는 일반 쓰레드의 보조적인 역할을 수행하므로 일반 쓰레드가 모두 종료되고나면 데몬 쓰레드의 존재의 의미가 없기 때문이다. 이 점을 제외하고는 데몬 쓰레드와 일반 쓰레드는 다르지 않다. 데몬 쓰레드의 예로는 가비지 컬렉터, 워드프로세서의 자동저장, 화면자동갱신 등이 있다. 데몬 쓰레드는 무한 루프와 조건문을 이용해서 실행 후 대기하고 있다가 특정 조건이 만족되면 작업을 수행하고 다시 대기하도록 작성한다. package thread; public class ThreadEx10 implements Runnable { .. 2022. 6. 2.
[Java] Thread(쓰레드) - 3 1. 싱글쓰레드와 멀티쓰레드 싱글 쓰레드 프로세스와 멀티 쓰레드 프로세스의 차이를 봐보자. 두 개의 작업을 하나의 쓰레드(th1)로 처리하는 경우와 두 개의 쓰레드(th1, th2)로 처리하는 경우를 가정해보자. 하나의 쓰레드로 두 작업을 처리하는 경우는 한 작업을 마친 후에 다른 작업을 시작하지만, 두 개의 쓰레드로 작업을 하는 경우에는 짧은 시간 동안 2개의 쓰레드가 번갈아가면서 작업을 수행해서 동시에 두 작업이 처리되는 것처럼 보인다. 하나의 쓰레드로 두 개의 작업을 수행한 시간과 두개의 쓰레드로 작업을 수행한 시간은 거의 같다. 오히려 쓰레드를 2개로 만들어서 사용한 경우가 더 오래걸린다. 그 이유는 쓰레드간의 컨텍스트 스위칭 비용이 추가로 걸리기 때문이다. 작업 전환을 할 때는 현재 진행중인 작.. 2022. 5. 31.
[Java] Thread(쓰레드) - 2 1. 쓰레드의 구현과 실행 쓰레드를 구현하는 방법은 Thread 클래스를 상속 받는 방법과 Runnable 인터페이스를 구현하는 방법 2가지이다. 두가지 방법 모두 상관없지만 Thread 클래스를 상속 받으면 다른 클래스를 상속받을 수 없기 때문에 Runnable 인터페이스를 구현하는 방법이 일반적이다. class MyThread extends Thread { public void run() { /* 작업 내용 */ } // Thread 클래스의 run()을 오버라이딩 } class MyThread implements Runnable { public void run() { /* 작업 내용 */ } // Thread 클래스의 run()을 오버라이딩 } 2개의 방식으로 쓰레스를 만들고 호출해본다. packa.. 2022. 5. 30.
[Java] Thread(쓰레드) - 1 1. 프로세스란? 프로세스란 간단히 말해서 "실행중인 프로그램"이다. 실행하면 OS로부터 실행에 필요한 자원(메모리)을 할당 받아 프로세스가 된다. 프로세스는 프로그램을 수행하는데 필요한 데이터와 메모리 등의 자원 그리고 쓰레드로 구성되어 있으며 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것이 쓰레드이다. 따라서 모든 프로세스는 최소한 하나 이상의 쓰레드가 존재하며, 둘 이상의 쓰레드를 가진 프로세스를 "멀티쓰레드 프로세스"라고 한다. 하나의 프로세스가 가질 수 있는 쓰레드의 개수는 제한되어 있지 않으나 쓰레드가 작업을 수행하는데 개별적인 메모리 공간(호출스택)을 필요로 하기 때문에 프로세스의 메모리 한계에 따라 생성할 수 있는 쓰레드의 수가 결정된다. 실제로는 프로세스의 메모리 한계에 다다를 정.. 2022. 5. 30.
[Java] 코딩 컨밴션 (Code Conventions ) 1. 코딩 규칙(Code Conventions)가 필요한 이유 소프트웨어를 개발하는 일련의 모든 과정에 들어가는 비용 중 80%가 유지보수에 쓰인다. 소프트웨어 유지 보수를 직접 개발한 개발자가 담당하는 경우는 거의 보기 힘들다. 코딩 규칙을 지키면 다른 개발자가 그 소스 코드를 처음 보았을 때 더 빨리 이해할 수 있게 도와주므로 소프트웨어의 가독성이 높아진다. 개발자가 자신의 소스 코드를 제품으로 팔려고 하면 자신이 작성한 다른 소스 코드들과 잘 어울리도록 패키지를 적절하게 구성할 필요가 있다. 2. 파일 이름 이 장에서는 흔하게 사용되는 파일 확장자와 파일 이름을 설명한다. 2.1 파일 확장자 파일 형태 확장자 자바 소스 .java 자바 바이트코드 .class 2.2 공통으로 사용되는 파일 이름 파일.. 2021. 4. 11.