Java/김영한의 실전자바 8

스레드 - interrupt()

스레드의 작업을 중간에 중단하는 방법flag값 설정 및 수정interrupt() 사용 flag값 설정특정 스레드의 실행을 flag 값이 true인 동안 계속해서 작업하도록 설정한다특정 스레드를 중단하는 시점에 flag 값을 false로 바꾼다이렇게 하면, 다음 반복문 실행 시점에 flag 값을 확인하고 해당 작업을 빠져 나온다static class MyTask implements Runnable { volatile boolean runFlag = true; @Override public void run() { while (runFlag) { log("작업 중"); sleep(3000); } log("자원 정리")..

스레드 - join()

join()특정 스레드가 다른 스레드들의 작업이 끝난 후, 무언가를 종합해서 하고 싶다면 join() 메소드를 사용해주면 된다. ex)스레드1 - 1 ~ 50의 합을 구한다스레드2 - 51 ~ 100의 합을 구한다메인 - 스레드1,2의 결과값의 합을 구한다 public static void main(String[] args) { log("start"); SumTask task1 = new SumTask(1, 50); SumTask task2 = new SumTask(51, 100); Thread thread1 = new Thread(task1, "task1"); Thread thread2 = new Thread(task2, "task2"); ..

스레드 제어

쓰레드 기본 정보스레드 ID - 스레드의 고유 식별자, 스레드 생성 시 할당되고, 지정할 수 없다.스레드 이름 - 내가 지정할 수 있고, 중복될 수 있다.스레드 우선순위 - 1(낮음) ~ 10(높음), 기본값은 5, 절대적인 실행순서는 아니다.(힌트)힌트라는 말은, 스케줄러가 '참고'하는 대상으로 인식한다는 정도스레드 그룹 - 스레드가 속한 그룹, 자주 사용하지는 않음부모 스레드 - 모든 스레드는(main 제외) 누군가가 생성해준다. 나를 생성해준 스레드가 부모 스레드스레드 상태 - 스레드의 현재 상태NEW - 스레드가 생성되고 아직 실행되진 않은 상태RUNNABLE - 스레드를 실행중이거나, 실행될 준비가 된 상태BLOCKED - 동기화 락을 기다리는 상태WATING - 다른 스레드의 작업이 완료되기를..

스레드의 생성과 실행

스레드의 생성Runnable 인터페이스 구현을 사용하자Thread 클래스 상속Runnable 인터페이스 구현 스레드는 Thread 클래스를 상속해서 만들거나, Runnable 인터페이스를 구현하는 방법으로 생성할 수 있다.실무에서는 Runnable 인터페이스를 구현하는 방법을 선호한다.Thread 클래스를 상속하는 경우, 다른 상속이 있는 경우에는 사용할 수 없다( 다중 상속 X )따라서, 스레드와 실행할 작업을 명확히 나누어서 개발할 수 있는 Runnable 방식을 사용한다.  스레드 생성 - Thread 클래스 상속Thread 클래스 상속 후 run() 메소드를 오버라이딩한다.public class HelloThread extends Thread { @Override public void ..

프로세스와 스레드

멀티태스킹하나의 컴퓨터 시스템이 동시에 여러작업을 수행하는 능력소프트웨어적 관점( 무지하게 빠른 CPU를 잘 활용해보자는 )CPU가 빠르게 여러가지 프로그램의 코드를 번갈아가며 실행하여, 동시에 실행되는 것 처럼! 멀티프로세싱둘 이상의 프로세서(CPU 코어)를 사용하여 동시에 여러 작업을 동시에 처리하는 기술하드웨어적 관점( 코어의 갯수가 여러가지 )코어의 갯수만큼은 동시에 프로그램을 실행할 수 있는 것! 프로세스실행중인 프로그램프로그램이 클래스라면, 프로세스는 인스턴스프로세스별 독립적인 공간 보유코드섹션, 데이터 섹션, 힙, 스택으로 구분( 스택은 스레드별로 주어지고, 나머지는 프로세스별로 주어진다! )스레드를 실행하기 위한 컨테이너의 느낌으로 생각하면 된다 스레드프로세스 내에서 반드시 하나 이상 존재..

[김영한의 실전 자바 - 기본편] 기본형과 참조형

기본형과 참조형기본형과 참조형 또한 자바를 공부하면서 반드시 이해하고 넘어가야 하는 내용이다.내용 자체는 어렵지 않지만, 헷갈릴 수 있기 때문에 한번 정리하고 넘어간다. 기본형(Primitive Type)int, long, double, boolean과 같이 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입 참조형(Reference Type)클래스, 배열과 같이 데이터에 접근하기 위한 주소값을 저장하는 데이터 타입( Student student, int[] students ) 기본형 = 데이터의 값을 넣을 수 있는 데이터 타입참조형 = 데이터의 주소값을 넣을 수 있는 데이터 타입 기본형은 변수에 값을 직접 넣어서, 참조형은 변수에 주소값을 넣어서 그 주소를 참조해 사용한다public static voi..

[김영한의 실전 자바 - 기본편] 클래스

클래스필드와 메소드로 구성되어 객체를 정의하는 역할 자바에서 클래스란 객체를 정의하는 틀, 설계도와 같은 의미로 사용된다.이 틀을 가지고, 객체를 생성하여 사용한다. 클래스는 객체의 상태를 나타내는 필드, 객체의 행동을 나타내는 메소드로 구성된다.필드는 객체에 포함되어 있는 변수를, 메소드는 함수와 같이 특정 작업을 수행하기 위해서 사용하는 집합체라고 할 수 있다 참 어려웠다.대학교때 이걸 처음봤을때가 생각난다. 클래스? 객체? 그게 그거 아닌가...특히 처음 접해보는 분들이 이 설명을 듣고 바로 이해를 할 수 있을까?강의에서는 이를 위해서 클래스가 필요한 이유를 설명해준다.  클래스가 필요한 이유? 먼저 다음 예시를 살펴보자.3개의 변수를 활용해서 간단히 학생의 정보를 입력하고, 이를 출력하는 코드이다..

[김영한의 실전 자바 - 기본편] 수강 후기

영한님의 자바 영한님의 자바 강의가 신규로 오픈되었다. 이번 자바 강의는 영한님이 다니던 우아한형제들에서 퇴사하시고, 처음 오픈되는 강의였다. ( 영한님은 이제 강의를 찍는데 집중한다고 하신다 ) 스프링을 한참 공부하고 있었지만, 영한님이 바라보는 자바를 꼭 한번 보고싶었다. 스프링 강의 중간중간 영한님이 자바에 대한 언급을 하실때마다 궁금했다. 개발바닥에서는 호돌맨님께서 처음 자바를 배우는 과정에서 영한님의 '지옥자바' 스터디가 언급되었다. 잠시 스프링 공부를 멈추더라도, 꼭 한번 보고 싶어서 수강하게 되었다. 강의는 입문편, 기본편이 동시에 오픈되었다. 입문편 입문편은 보통 책으로 보자면, 객체지향언어가 시작되기 직전까지의 내용이다. 이걸 심지어 무료로 공개하셨다... 물론 입문편도 수강해보았는데, ..