22. 배열 (Array 여관) -> 배열도 객체다.
(1) 설명
- 같은 타입(Type)의 객체 또는 기본자료를 저장하는 저장소로서, 생성될때 그 크기가
고정되는 저장소 객체.
(2) 선언
Type 배열변수명[];
ex) int is[], int[] is, int []is, int [] is, String str[].....
(3) 생성
-> new Type[저장소크기]
ex) new int[5], new String[3]....
(4) 배열 방의 default 값
<1> 참조형
- 방의 기본값 --> null
<2> 기본형
- 정수(byte, short, char, int, long) -> 0.0L
- 실수(float, double) -> 0.01, 0.0
- 불린(boolean) -> false
(5) 초기화
확보된 공간(방)에 데이터를 최초로 넣은것
ex) strs[0] = "봄", strs[1] = "여름", ... , is[0]=100, ..
(ex: 005day/ArrayTest.java)
(6) 선언/생성
Type 배열변수명[] = new Type[저장소크기];
ex) String strs[] = String[3], int is[] = new int[2], ..
(ex: 005day/ArrayTest2.java )
(7) 선언 / 생성 / 초기화
-> Type 배열변수명[] = {데이터1, 데이터2, 데이터3, 데이터4......};
ex) int is[] = {10, 20, 30};
String str[] = {"하나", "둘", "셋", "넷"};
cf) 배열은 멤버변수로 선언하고 생성자나 메소드에서 생성초기화(={}) 할 수 없다.
(ex: 005day/ArrayTest3.java)
(8) 배열값의 형변환
ex1) int i =30;
short ss[] = {10, 20, (short)i};
ex2) Object obj[] = {new String("감자"), new Object()};
(ex: 005day/ArrayTest4.java)
(9) 이차원 배열
-> 일차원 배열을 하나의 데이터(배열요소)로 취급하는 배열
(10) 삼차원 배열
-> 이차원 배열을 하나의 데이터(배열요소)로 취급하는 배열
(ex: 005day/ArrayTest5.java)
23. 쓰레드
(1) 설명 : 프로세스를 구성하는 제어의 흐름
(2) Process 와 Thread 의 차이
<1> Process : 프로그램의 실행 단위
<2> Thread : Process를 구성하는 작업 단위
(3) 비유 : 고용인.
ex1) 소리바다에서 다운로드를 받으면서 음악을 듣는 것
ex2) word에서 입력과 동시에 오타를 처리하는 것
ex3) 웹브라우저에서 다운로드 받으면서 웹서핑 하는 것
ex4) Startcraft의 인물들, 배경음악이 동시에 나오는 것
ex5) 식당 주인(계산) + 서빙(음식배달) + 주방장(음식생산)
(4) 장점
쓰레드는 경량프로세스라고 일컬어 질 정도로 가볍다.
이유는 프로세스의 자원(resource)를 공유하기 때문이다.
(5) Thread 를 생성하는 2가지
<1> java.lang.Thread 클래스를 상속 받는 방법
(ex: Thread1.java)
<2> java.lang.Runnable 인터페이스를 상속 받는 방법
(ex: Thread2.java)
(6) 실행법
쓰레드객체.start();
(7) Thread 의 Priority (우선순위)
<1> 설명
Ready 상태의 쓰레드 중에서, 우선적으로 CPU를 점유할 수 있는
쓰레드를 판별하기 위한 LEVEL값.
<2> 범위 : 1~10
<3> 상수
(ex: Thread3.java)
(8) Thread 의 LifeCycle (ppt참조)
(9) 주요메소드
<1> sleep();
<2> join();
<3> yield();
(10) 쓰레드의 동기화
<1> 설명
두 개 이상의 쓰레드가 어떤 연산에 동시에 접근했을 때 그 연산에
대한 값(데이타)의 무결성을 보장하기 위해서 수행 영역에 대한
lock을 걸어주는 것.
ex) i++; // 현재 i값은 0
methodA() // 비동기 메소드
{
- 1단계 : 기존의 i값을 읽는다.
- 2단계 : 그 값을 1 증가 시킨다.
- 3단계 : 증가된 값을 i에 대입시킨다.
} i == 2 //정답, 오류 : i == 1
<2> 비유 : 화장실사용
<3> 방법
synchronized 예약어를 메소드나 어떤 영역(블럭)에 써주면 된다.
ex1) public synchronized void methodA(){연산}
ex2) public void methodA()
{
synchronized(this){연산}
}
cf) synchronized 로 감싸진 영역을 동기화 블럭이라하고 동기화 블럭에서는
동시에 오직 하나의 쓰레드만이 작업을 수행 한다.
(ex: 005day/Thread4.java)
etc) 여러개의 역할별 쓰레드 생성
(ex: OwnerThread.java)