분류 전체보기 (236) 썸네일형 리스트형 [JAVA] 쓰레드의 동기화 멀티 쓰레드 프로그램에서는 프로세스의 자원을 여러 쓰레드가 공유한다. 그렇기 때문에 각각의 작업이 다른 작업에게 영향을 끼치게 된다. 이러한 경우 공유 데이터의 변경으로 인해 개발자가 의도했던 결과가 나오지 않을 수 있다. 이러한 문제를 해결하기 위해서 임계영역 (critical section) 과 락 (lock) 개념을 도입하여 한 쓰레드가 작업을 종료할 때까지 다른 쓰레드에게 방해받지 않도록 한다. 공유 데이터를 임계영역으로 지정해놓고, 해당 영역의 lock 을 획득한 쓰레드만이 공유 데이터를 사용할 수 있도록 하여 문제를 해결한다. 이처럼 한 쓰레드가 진행 중인 다른 쓰레드를 방해하지 못하도록 막는 것을 쓰레드의 동기화 (synchronization) 이라고 한다. 자바에서는 synchronized.. [JAVA] 쓰레드 실행제어 1. 쓰레드 우선순위 쓰레드는 우선순위라는 속성을 가지고 있다. 이 우선순위의 값에 따라 쓰레드가 얻는 실행시간이 달라진다. 각 쓰레드가 수행하는 작업의 중요도에 따라 쓰레드의 우선순위를 다르게 지정하여 실행시간을 조절할 수 있다. - 쓰레드의 우선순위 지정 void setPriority(int newPriority) // 쓰레드의 우선순위를 지정한 값으로 변경한다. int getPriority() // 쓰레드의 우선순위를 반환한다. public static final int MAX_PRIORITY = 10; // 최대우선순위 public static final int MIN_PRIORITY = 1; // 최소우선순위 public static final int NORM_PRIORITY = 5; // 보통.. [JAVA] 쓰레드 구현 및 실행 (Thread, Runnable, start(), run()) 1. 쓰레드 구현 쓰레드를 구현하는 방법은 Thread 클래스를 상속받는 방법과 Runnable 인터페이스를 구현하는 방법, 두가지가 있다. 각각의 방식으로 구현은 다음과 같이 할 수 있다. // Thread 클래스 상속 class ThreadClass extends Thread { // Thread 클래스의 run() 을 오버라이딩 public void run() { ... } } // Runnable 인터페이스 구현 class RunnableClass implements Runnable { // Runnable 인터페이스의 추상메서드 run() 을 구현 public void run() { ... } } 둘 간의 큰 차이는 없지만 Thread 클래스를 상속받으면 다른 클래스를 상속받을 수 없기 때문에 .. [JAVA] 프로세스와 쓰레드 1. Process, Thread 프로세스란 간단히 말해서 실행중인 프로그램을 의미한다. 프로그램을 실행하면 OS 로부터 실행에 필요한 자원, 메모리를 할당받아 프로세스가 된다. 프로세스는 프로그램을 수행하는데 필요한 데이터와 메모리 등의 자원, 그리고 쓰레드로 구성되어 있다. 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것이 바로 쓰레드이다. 모든 프로세스는 하나 이상의 쓰레드를 가지고 있으며, 둘 이상의 쓰레드를 가진 프로세스를 멀티쓰레드 프로세스, multi-threaded process 라고 한다. 하나의 프로세스가 가질 수 있는 쓰레드의 개수는 제한되어 있지 않으나, 쓰레드가 작업을 수행하는데 필요한 메모리가 한계에 다다르면 더이상 쓰레드를 만들 수 없다. - 멀티태스킹과 멀티쓰레딩 현재 .. [JAVA] Annotation 1. annotation 애너테이션은 주석, 주해, 메모 라는 뜻을 가지고 있다. 자바에서 에너테이션은 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것이다. '@' 기호를 붙여서 표현하며, 주석처럼 프로그램에 직접적인 영향을 미치지 않으면서 정보를 제공한다. 대표적인 애너테이션으로 @Override, @Test 등을 사용하곤 하는데, 각각 이후에 나오는 소스코드가 오버라이딩을 위한 메서드, 테스트를 위한 메서드임을 알려주는 역할을 한다. 이와같이 JDK 에서 미리 제공하는 애너테이션들을 표준 애너테이션이라고 하는데, 주로 컴파일러를 위한 것들이다. 이외에도 개발자가 직접 애너테이션을 정의할 수 있는데, 이때 메타 에너테이션을 사용하면된다. 2. 표준 애너테이션 자바에서 제공하.. [JAVA] Enums 1. 열거형, enums 열거형은 JKD1.5 부터 추가된 타입으로 열거형이 갖는 값뿐만 아니라 타입까지 관리하여 논리적인 오류를 줄일 수 있다. C언어의 열거형은 타입을 관리하지 않기 때문에 타입이 달라도 값이 같은 경우에 조건식 결과가 true 로 반환한다. 하지만 자바는 타입에 안전한 열거형, typesafe enum 이기 때문에 값이 같아도 타입이 다른 경우 false 를 반환한다. 2. 열거형의 정의와 사용 열거형을 정의하는 방법은 중괄호 {} 안에 상수의 이름을 나열하기만 하면 된다. 열거형에 정의된 상수를 사용하는 방법은 (열거형이름).(상수명)으로 사용할 수 있다. enum EnumName {CONSTANT1, CONSTANT2, ... } System.out.println(EnumName.. [Web] html form 태그에서 PUT, DELETE 사용 1. client - html form 태그 REST API 를 설계하다보면 필요에 따라 GET, POST 뿐만 아니라 PUT 과 DELETE 메서드를 사용해야 하는 경우가 있다. 그러나 form 태그에서는 기본적으로 GET, POST 방식만 지원한다. 그렇기 때문에 PUT, DELETE 메서드를 사용하기 위해서는 다음과 같이 hidden input 라인을 추가해주어야 한다. 이 방법은 약간의 꼼수인데, 위와 같이 hidden input 의 value 에 사용하고자 하는 메서드를 입력하여 form 태그 내부에 숨겨서 전송을 하는 것이다. thymeleaf 템플릿을 사용하는 경우에는 다음과 같이 구현할 수 있다. ... thymeleaf 는 따로 hidden input 태그를 추가하지 안하도 자동으로 추가.. [Web] Rest URI 네이밍 1. What is a Resource? REST 방식에서는 주요 데이터 표현, 개념을 리소스라고 한다. REST 방식에서 얻을 수 있는 정보들, 문서나 이미지, 특정 서비스 또는 다른 리소스들의 컬렉션 등을 리소스라고 한다. 리소스는 어떤 특정한 엔티티라기보다는 엔티티들의 집합과 개념적으로 매핑되어 있다고 이해할 수 있다. 1) Singleton and Collection Resources 리소스는 singleton 이 될 수도, collection 이 될 수도 있다. 예를 들어 customer 라는 엔티티가 있을 때, customer 는 싱글 리소스, customers 는 컬렉션 리소스가 된다. customers 는 '/customers' 로 customer 에 대해서는 '/customers/{cus.. 이전 1 ··· 8 9 10 11 12 13 14 ··· 30 다음