프로그래밍 언어 정리/Java (5) 썸네일형 리스트형 [Java] 스레드 동기화 동기화멀티 스레드에서 스레드끼리는 stack area를 제외하고 메모리를 공유한다.공유 자원에 접근하는 경우, 스레드끼리 race condition이 발생하여 정합성을 보장할 수 없다.이를 위해 상호 배제 (Mutual Exclusion: Mutex)를 사용하여 공유 자원이 존재하는 구역(Critical Section)에는 하나의 스레드만 접근 가능하도록 해야 한다. → 동기화해야 한다.Java에서는 synchronized 키워드를 사용하여 해결할 수 있다.synchronizedsynchronized를 사용하는 방식은 여러 가지가 있다.적당한 예시를 통해 이해하는 것이 더 나을 것 같아서 밑에서 설명하도록 하겠다.몬스터 잡기 예제개별 플레이어는 스레드로 존재한다.멀티 스레드를 사용하여 두 플레이어는 독립.. [Java] 스레드 스레드스레드 자체에 대한 개념은 이 글에서Java 스레드는 JVM 메모리 영역에서 Stack area만 고유하게 갖고 Heap, Method(static) area는 공유한다.Thread Class vs Runnable Interface스레드를 생성할 때는 Thread Class를 상속하거나 Runnable 인터페이스를 구현하여 생성할 수 있다.일반적으로 Runnable 인터페이스를 사용하는데, 그 이유는 다음과 같다.Thread Class는 스레드를 관리하는 클래스이다. 해당 클래스에 스레드 로직을 심어두는 행위는 단일 책임 원칙에 위배될 수 있다.Java에서는 다중 상속을 지원하지 않기 때문에 Thread Class를 상속받으면 다른 클래스로부터 상속을 받을 수 없다.Executors가 Runnabl.. [Java] JVM, JRE, JDK JVM자바를 실행시키는 가상 머신JVM만 설치되어 있다면 OS와 관계없이 Java 프로그램을 실행시킬 수 있다. (높은 이식성)JVM은 운영체제에 종속됨자바 컴파일러에 의해 바이트 코드(.class)가 컴파일되고, JVM이 이를 읽어서 바이너리 코드(기계어)로 변환한다. (느리다)JREJVM + 각종 라이브러리(Util, Lang, JDBC 등)가 포함된 자바 실행 환경JDK자바 개발 키트: 자바로 개발에 사용되는 SDK자바로 개발하기 위한 JRE, Development Tool(javac, javap, jar, java 등)이 들어있다.4가지의 버전 존재Java SE: 표준 버전Java EE: 기업용 버전. 서버 개발에 주로 사용Java ME: 임베디드 버전Java FX: GUI 버전Reference블로그 [Java] public static void main(String args[]) Java를 처음 배울 때 그냥 기계적으로 쓰던 문장. 이 문장이 무슨 뜻인지 하나씩 뜯어보도록 하겠습니다. [public] 접근 지정자입니다. 접근 지정자로는 아래의 네 가지가 있습니다. public: 공용 멤버, 모든 클래스에서 사용 가능. 다른 패키지에서도 import를 통해 사용 가능. private: 전용 멤버, 해당 클래스에서만 사용 가능. protected: 보호 멤버, 해당 클래스 및 서브 클래스(상속받는 클래스)만 사용 가능. package: 패키지 멤버, 같은 패키지에서만 사용 가능. (접근 지정자를 명시하지 않으면 패키지 멤버가 됩니다.) 이 중에서 public을 사용한 것입니다. 자바 가상 머신 (Java Virtual Machine)이 main문에 접근하기 위해 public을 사용합.. [Java] 컴파일 일반적인 경우, 컴파일러는 소스 코드가 작성된 소스 파일을 읽어 기계어로 변환한 후 오브젝트 파일에 저장합니다. 리눅스 환경에서 C 소스 코드를 컴파일했을 때 볼 수 있는, 확장자가 .c인 파일이 소스 파일, 확장자가 .o인 파일이 오브젝트 파일에 해당합니다. 그러나 Java의 경우에는 컴파일러가 소스 코드를 기계어로 바로 변환하지 않습니다. 컴퓨터를 위한 기계어가 아닌, 자바 가상 기계(JVM)를 위한 중간 코드인 바이트 코드를 생성합니다. 바이트 코드는 기계어와 일치하지는 않으나, 어떠한 기계어와도 쉽게 변환할 수 있습니다. Java 소스 코드를 컴파일 했을 때 볼 수 있는, 확장자가 .java인 파일이 소스 파일, 확장자가 .class인 파일이 바이트 코드로 작성된 파일입니다. 자바 가상 기계(JV.. 이전 1 다음