자바 (16) 썸네일형 리스트형 Lock과 Condition (await()과 signal(),signalAll()) synchronized 블록으로 동기화를 구현하면 원하는 쓰레드를 선택해서 notify()를 할 수 없어 경쟁상태(race condition)와 기아상태(starvation)가 발생할 수 있습니다. 해당 내용은 아래 포스팅에서 확인하실 수 있습니다! https://silver-programmer.tistory.com/entry/wait%EA%B3%BC-notify-notifyAll wait()과 notify(), notifyAll() 멀티 쓰레드로 구성된 프로세스에서 임계 영역을 보호하기 위해, 즉 쓰레드의 동기화를 위해 synchronized 키워드를 활용합니다. 혹시 synchronized에 대해서 개념을 알고 싶으신 분들은 아래 포스팅을 silver-programmer.tistory.com 이 때 .. wait()과 notify(), notifyAll() 멀티 쓰레드로 구성된 프로세스에서 임계 영역을 보호하기 위해, 즉 쓰레드의 동기화를 위해 synchronized 키워드를 활용합니다. 혹시 synchronized에 대해서 개념을 알고 싶으신 분들은 아래 포스팅을 참고해 주세요! https://silver-programmer.tistory.com/entry/synchronized%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%93%B0%EB%A0%88%EB%93%9C%EC%9D%98-%EB%8F%99%EA%B8%B0%ED%99%94 synchronized를 이용한 쓰레드의 동기화 이번 포스팅은 쓰레드의 동기화를 위한 synchronized에 대하여 작성하였습니다. 싱글 쓰레드가 아닌 멀티 쓰레드로 프로세스를 구성할 때, 같은 자.. synchronized를 이용한 쓰레드의 동기화 이번 포스팅은 쓰레드의 동기화를 위한 synchronized에 대하여 작성하였습니다. 싱글 쓰레드가 아닌 멀티 쓰레드로 프로세스를 구성할 때, 같은 자원을 공유해서 작업을 하게 됩니다. 따라서 서로의 작업에 영향을 미치게 되고 이로 인해 의도했던 것과는 다른 결과를 얻을 수 있게 되는 문제점이 있습니다. 아래 예시를 통해 어떤 문제점이 발생하는지 확인해 보겠습니다. public class Main { public static void main(String[] args) { Runnable r1 = new Thread_0(); new Thread(r1).start(); new Thread(r1).start(); } } class Thread_0 implements Runnable { TargetInstan.. 제네릭(Generic) 타입의 형변환 이번 포스팅에서는 제네릭 타입에서는 어떤 형변환이 가능하고 불가능한지에 대해서 알아보겠습니다. 1. 제네릭타입과 원시 타입끼리의 형변환 아래의 코드처럼 제네릭타입과 원시 타입끼리는 형변환이 가능하지만 경고가 발생합니다. class Box {} public class Main { public static void main(String[] args) { Box box = new Box(); Box stringBox = new Box(); box = (Box)stringBox; // 가능, but 경고 발생 stringBox = (Box) box; // 가능, but 경고 발생 } } 2. 제네릭 타입 간의 형변환 대입된 타입이 같은 제네릭 타입끼리는 당연히 형변환이 가능합니다. 그렇다면 다른 제네릭 타입 간.. Thread 구현과 실행 (Runnable vs Thread) 이번 포스팅은 Thread를 구현하는 방법 2가지와 Thread의 start()와 run() 메서드의 차이점에 대하여 포스팅해 보았습니다. Thread 생성 1. Thread 클래스 상속 선언 class Thread_1 extends Thread{ @Override public void run(){ for(int i=0;i 자바의 애너테이션(Annotation) 애너테이션이란, 주석처럼 프로그래밍 언어에 영향을 미치지는 않으면서도 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킴으로써 다른 프로그램에게 유용한 정보를 제공할 수 있는 기능을 제공하는 '메모'라고 할 수 있습니다. 이번 포스팅은 자바에서 제공하는 애너테이션에 대해서 알아보겠습니다. 자바에서 기본적으로 제공하는 애너테이션 중 대표적인 종류는 아래와 같습니다. 애너테이션 설명 @Override 컴파일러에게 오버라이딩하는 메서드라는 것을 알려줍니다. @Deprecated 앞으로 사용하지 않을 것을 권장하는 대상에 붙입니다. @SuppressWarnings 컴파일러의 특정 경고메시지가 나타나지 않도록 해줍니다. @FunctionalInterface 함수형 인터페이스임을 나타냅니다. 그리고 자바에서.. 자바에서 애너테이션(Annotation) 직접 정의하기 애너테이션이란, 주석처럼 프로그래밍 언어에 영향을 미치지는 않으면서도 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킴으로써 다른 프로그램에게 유용한 정보를 제공할 수 있는 기능을 제공하는 '메모'라고 할 수 있습니다. Java에서는 @Override나 @SuppressWarnings와 같은 다양한 애너테이션을 제공합니다. 이번 시간에는 우리가 직접 애너테이션을 만들어서 어떻게 사용할 수 있는지에 대해서 알아보겠습니다. 애너테이션 정의 먼저, 애너테이션을 정의하는 방법은 아래와 같습니다. @interface 애너테이션이름{ 타입 요소이름 (); // 애너테이션 요소 선언 ... } 애너테이션의 요소는 반환값이 있고 매개변수는 없는 추상 메서드의 형태를 가집니다. 상속을 통해서 구현될 필요는 없습.. 열거형(enums) 열거형이란? 데이터형의 일종으로, 특정한 값들의 집합을 정의하는 데 사용되며, 이 값들은 열거형 내에서 고유한 상수로 식별됩니다. 열거형 상수를 사용하면 상수의 값이 바뀌어도 기존의 소스를 다시 컴파일하지 않아도 되는 장점이 있습니다. Java에서의 열거형은 '타입에 안전'(컴파일 시 객체의 타입을 체크)한 열거형이기 때문에 두 개의 데이터의 실제 값이 같아도 타입이 다르면 두 데이터는 다르다고 판단합니다. 아래 코드를 보겠습니다. [참고] - '타입 안전이란?' 프로그래밍에서 주로 사용되는 용어로, 변수나 데이터의 타입(데이터 형식)에 대한 안전성을 나타냅니다. 타입에 안전한 프로그램은 변수나 데이터를 올바른 타입으로 사용하고, 타입 불일치로 인한 오류를 방지합니다. 타입에 안전한 언어 예시로는 Jav.. 이전 1 2 다음