일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- bit manipulation
- simulation
- Binary Search
- Stack
- hash table
- Matrix
- 구현
- implement
- string
- SQL
- Class
- Method
- Binary Tree
- array
- Tree
- two pointers
- database
- 코테
- Math
- 코딩테스트
- Number Theory
- geometry
- greedy
- 파이썬
- Counting
- Data Structure
- java
- sorting
- dynamic programming
- 자바
- Today
- Total
목록Java (109)
코린이의 소소한 공부노트

[동기화가 필요한 이유] 1. 멀티 쓰레드 프로세스에서는 다른 쓰레드의 작업에 영향을 미칠 수 있다. - 진행 중인 작업이 다른 쓰레드에게 간섭받지 않게 하려면 동기화가 필요하다. 2. 동기화를 하려면 다른 쓰레드에게 간섭받지 않아야 하는 문장들을 임계 영역(critical section)으로 설정한다. - 임계 영역은 락(lock)을 얻은 단 하나의 쓰레드만 출입이 가능하다.(객체 1개에 락 1개) - 락을 걸어둠으로써 데이터의 일관성을 유지하게 한다. - 임계 영역이 많을수록 성능이 떨어지기 때문에 최소한의 영역만 설정한다. [synchronized 키워드를 이용한 동기화] 1. 임계 영역을 설정하는 방법 // 1) 특정한 영역을 임계 영역으로 지정 synchronized(객체의 참조변수) { // ..

[데몬 쓰레드] boolean isDaemon() // 쓰레드 그룹이 데몬 쓰레드 그룹이면 true를 반환한다. void setDaemon(boolean on) // 쓰레드를 데몬 쓰레드 또는 사용자 쓰레드로 변경한다. on을 true로 지정하면 데몬 쓰레드가 된다. // setDaemon()은 반드시 start()를 호출하기 전에 실행되어야 한다. // start() 후에는 데몬 쓰레드로 변경할 수 없기 때문이다. // start() 전에 setDaemon()을 호출하면 IllegalThreadStateException이 발생한다. 1. 일반 쓰레드(non-daemon thread)의 작업을 돕는 보조적인 역할을 수행하는 쓰레드 2. 일반 쓰레드가 모두 종료되면 자동적으로 종료된다. 3. 가비지 컬렉터..

[쓰레드의 우선순위] 1. 작업의 중요도에 따라 쓰레드의 우선순위를 다르게 하여 특정 쓰레드가 더 많은 작업 시간을 갖도록 할 수 있다. void setPriority(int newPriority) // 쓰레드의 우선순위를 지정한 값으로 변경한다. int getPriority(); // 쓰레드의 우선쉰위를 반환한다. public static final int MAX_PRIORITY = 10; // 최대 우선순위 public static final int MIN_PRIORITY = 1; // 최소 우선순위 public static final int NORM_PRIORITY = 5; // 보통 우선순위 2. JVM은 우선순위를 10단계로 해놓은 반면 winOS는 32단계로 해놨기 때문에, 우리가 쓰레드의 우..

[실행에서의 차이] 1. 싱글쓰레드는 순서대로 실행된다. class ThreadTest{ // 싱글쓰레드 테스트 public static void main(String args[]){ for(int i=0 ; i

[쓰레드의 구현 방법] 아래 두 가지 방법 중 하나를 선택한 후 run()에 쓰레드로 작업하고자 하는 내용을 채운다. 1. Thread 클래스를 상속받는다. class MyThread1 extends Thread{ public void run(){ // Thread 클래스의 run() 오버라이딩 for(int i=0; i < 5; i++) System.out.println(getName()); // 조상인 Thread의 getName()을 호출 // this.getName()에서 this가 생략된 형태 } } 2. Runnable 인터페이스를 구현한다. (권장. 자바는 단일 상속) public interface Runnable{ public abstract void run(); } class MyThre..

[쓰레드 관련 용어 정리] 1. 프로그램(program) - 실행 가능한 파일 - HDD(하드디스크)에 저장되어있음 2. 프로세스(process) - 실행 중인 프로그램 - 메모리(RAM)에 올라와있음 - 자원(resource, 메모리, CPU 등)과 쓰레드(thread)로 구성 3. 쓰레드 - 프로세스 내에서 실제 작업을 수행하는 주체 - 모든 프로세스는 하나 이상의 쓰레드를 갖고 있다 - 프로세스 : 쓰레드 = 공장 : 일꾼 1) 싱글 쓰레드 프로세스 - 쓰레드가 1개인 프로세스 - 자원 + 쓰레드 2) 멀티 쓰레드 프로세스 - 쓰레드가 2개 이상인 프로세스 - 자원 + 쓰레드 + 쓰레드 + ... + 쓰레드 [멀티 프로세스 vs 멀티 쓰레드] 하나의 새 프로세스를 생성하는 것보다 하나의 새 쓰레드를..

[애너테이션 타입 정의하기] 1. 애너테이션을 직접 만들어 쓸 수 있다. @interface 애너테이션이름{ 타입 요소이름(); // 애너테이션의 요소 선언 ... } 2. 애너테이션의 메서드는 추상 메서드이며, 구현할 필요가 없다. 3. 애너테이션을 적용할 때 모두 지정해야 한다.. 이름과 값을 다 지정하기 때문에 순서는 상관없다. @interface DateTime{ String yymmdd(); String hhmmss(); } @interface TestInfo { int count(); String testedBy(); String[] testTools(); TestType testType(); // enum TestType { FIRST, FINAL } DateTime testDate(); /..

[애너테이션의 정의] 1. 애너테이션은 주석이라는 뜻 2. 우리가 일반적으로 사용하는 주석(/* */, //)처럼 프로그래밍 언어에 영향을 미치지 않는다. 3. 소스코드를 테스트하는 프로그램(JUnit)에게 유용한 정보를 제공한다. /** 컨테이너 애너테이션 ToDo[] value(); // @Todo타입의 배열 선언. 이름이 반드시 value여야 한다. } [쿠키글] 기타 애너테이션 1. @Native 1) navite 메서드에서 참조되는 상수 앞에 붙인다. @Native public static final long MIN_VALUE = 0x8000000000000000L; 2) JVM이 native 메서드(OS 메서드)를 잘 쓸 수 있게 해주는 것이 JNI(Java Native Interface, 다..

[열거형] 1. 관련된 상수들을 같이 묶어 놓는 것 2. 자바는 타입에 안전한 열거형을 제공한다. - 타입에 안전하다는 것은 값과 타입을 동시에 체크한다는 것을 말한다. // 열거형을 쓰지 않았을 때// 열거형을 쓸 때 class Card1{class Card2{ // 무늬 // 무늬 0 1 2 3 static final int CLOVER = 0; enum Kind { CLOVER, HEART, DIAMOND, SPADE } static final int HEART = 1 // 열거형 Kind 정의 static final int DIAMOND = 2; static final int SPADE = 3; // 숫자 // 숫자 0 1 2 static final int TWO = 0; enum Value { ..

[지네릭 타입의 형변환] 1. 지네릭 타입과 원시 타입 간의 형변환은 바람직하지 않다. Box box = null; Box objBox = null; Box strBox = null; box = (Box)objBox; // OK. 지네릭 -> 원시. 경고 발생 objBox = (Box)box; // OK. 원시 -> 지네릭. 경고 발생 box.add(new Integer(100)); // OK. box가 원시타입이기 때문에 경고만 발생함 2. 서로 다른 지네릭 타입으로는 형변환이 되지 않는다. objBox = (Box)strBox; // 에러. Box -X-> Box strBox = (Box)objBox; // 에러. Box -X-> Box 3. 와일드카드가 사용된 지네릭 타입으로는 형변환이 가능하다. ..