Thread 를 상속 받아야 사용할 수 있음
구현 : public void run() {}
실행 : .start()
Runnable 인터페이스를 상속받아서 @Overide 로 사용
setName(), getName()으로 이름을 지정
우선 순위 지정 : setPriority()
특정 객체 동기화 처리 :
synchronized (foo) {}wait() : 대기 상태
notify(), notifyAll() : 스레드를 깨움
join() : 어떤 스레드 처리가 종료되었을 때 자신의 스레드를 실행함
sleep : 스레드를 지정된 시간동안 일시 정지시킴
interrupt : 대기 상태 (wait, join, sleep) 를 취소 시킴
실행할 스레드를 미리 생성하여 관리하는 자원
Semaphore
실행할 수 있는 스레드 수를 제어하기 위한 카운터 제공
데이터 타입을 일반화는 것
public class Bag<T> {
private T thing; // 타입을 후지정할 수 있음 3
}
<T, N> : 멀티 타입 파라미터 = T, N을 동시에 받을 수 있음
조건 지정 :
public class Bag<T extends Solid> {
private T thing; // Soild 를 상속받아야 사용 가능
}
와일드 카드
<?> : 제한 없음
제네릭 메소드 : <Foo> test(new Foo(50)) {}
가변 길이 인수 : int...
제네릭 상속 : 부모의 T를 상속받아야 함
public enum Test() {} : 서로 연관된 상수들의 집합
컴파일러에게 정보 제공, 빌드, 배치 시 정보를 제공, 실행 시 정보 제공
@Override : 오버라이딩@Deprecated : 현재 사용 중이지만 추후 삭제될 수 있음@SuppressWarnings : Warning 생략@FunctionalInterface : 이 인터페이스는 추상 메소드 하나만 있다.@SafeVarargs : 개발자가 직접 Warning 생략@interface : 사용자 정의 어노테이션인터페이스 구현 : 인터페이스의 추상 메소드를 익명 클래스의 매개 변수, 리턴값으로 사용함
→ 이를 간단하게 표현하기 위해 람다식을 사용
형태 : () -> 명령문, () -> {명령문 return}
@FunctionalInterface : 함수형 인터페이스 선언 (반드시 메소드 1개)
제네릭을 단순히 ArrayList에만 사용했는데 클래스, 매개 변수에도 사용할 수 있었음
이전 람다식은 스트림과 같이 사용했지만 다시보니 JavaScript의 익명 함수와 같았음