분류 전체보기 (132) 썸네일형 리스트형 volatile 키워드 자바 코드를 보면 특정 변수 앞에 volatile이라는 키워드가 붙어져 있는 경우를 볼 수 있습니다. volatile 키워드가 무엇이고 왜 사용되는지에 대해서 해당 포스팅을 작성하였습니다. 자유롭게 피드백해 주시면 감사하겠습니다!! volatile 키워드 필요한 이유 먼저, volatile 키워드가 무엇인지에 대하여 설명하기 전에 왜 volatile 키워드가 필요한지 그 배경에 대해서 알아보겠습니다. 싱글 코어 프로세서가 장착된 컴퓨터가 아닌, 멀티 코어 프로세서로 돌아가는 컴퓨터에서는 코어마다 별도의 캐시를 가지고 있습니다. 코어는 메모리에서 어떤 값을 읽어와서 캐시에 저장한 후, 캐시에서 값을 읽어서 작업합니다. 해당 값이 필요할 때 우선 캐시에 값이 저장되어 있는지 확인한 후, 없으면 메모리에서 값.. 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 실행 제어 여러 thread가 실행될 때 Thread 클래스에서 제공하는 다양한 메서드를 통해 쓰레드들끼리의 실행 순서를 정하거나, 실행을 일시정지시키는 등 실행 제어가 가능합니다. 이번 포스팅은 쓰레드 실행 제어에 관련 있는 메서드에 대해서 알아보겠습니다! Thread 실행 제어 메서드 종류 메서드 설명 static void sleep(long millis) static void sleep(long millis, int nanos) 지정된 시간동안 쓰레드를 일시정지 시킵니다. 지정한 시간이 지나면 자동적으로 다시 실행대기상태가 됩니다. (millis: 1000분의 일초, nanos:10억분의 일초) void join() void join(long millis) void join(long millis, int na.. 백엔드 개발자를 위한 도서 리스트 (계속 업데이트 할 예정입니다!!) 아래 있는 책들은 제가 미래에 꼭 읽어봐야 할 책 리스트라고 생각해서 기록해두었습니다. 참고하셔서 도서 선정에 도움이 되시길 바랍니다~ [좋은 코드 작성을 위한 책] 1. [코드 컴플리트2: 더 나은 소프트웨어 구현을 위한 실무 지참서] - 좋은 코드 작성법을 알려주는 기본적인 책 https://wikibook.co.kr/code-complete-2-ebook/ Code Complete 코드 컴플리트 2 (ebook): 더 나은 소프트웨어 구현을 위한 실무 지침서 《Code Complete 2》는 소프트웨어 구현을 둘러싼 다양한 비유부터 기초적인 프로그래밍, 시스템 구축, 소프트웨어 장인정신에 이르기까지 소프트웨어 업계에 종사하는 분이라면 누구나 읽어야 할 wikibo.. 제네릭(Generic)이란? 자바의 제네릭(Generic)은 다양한 타입의 객체를 다루는 메서드나 컬렉션 클래스에 컴파일 시 컴파일 체크를 해주는 기능을 제공해 줍니다. 컴파일 시에 타입 체크를 해주기 때문에 객체의 타입 안정성을 높이고 형변환을 할 필요가 없어 편리합니다. 즉, 타입 안정성을 제공해 주기 때문에 의도하지 않은 타입의 객체가 저장되는 것을 방지하고, 저장된 객체를 꺼내올 때 잘못 형변환 되는 것을 막아줍니다. 이번 포스팅은 자바의 제네릭에 관한 내용을 폭넓게 다뤘습니다. 제네릭 자체가 내용이 많다 보니 이해하기가 어려웠는데 이번 포스팅을 보고 도움이 되길 바랍니다!! 제네릭 클래스 선언 제네릭 클래스는 아래와 같이 선언하면 됩니다. public class Box { T item; void setItem(T item).. 이전 1 ··· 9 10 11 12 13 14 15 ··· 17 다음