목록전체 글 (75)
Super Coding Addict
* critical section (임계 영역) - 두개 이상의 thread가 동시에 접근하게 되는 리소스 - 동시에 여러 개의 thread가 이 영역에 접근하게 되면 실행 결과 보장 불가 --> 따라서 thread간 순서를 맞추는 동기화(syncronization)이 필요!! Java에서 공유자원이 되는 것은 static 키워드를 가진 객체라고 보면 됨 * 동기화 (syncronization) - 임계영역에 여러 thread가 접근하는 경우, 한 thread가 수행하는 동안에 임계영역 안의 공유자원을 lock해서 다른 thread의 접근을 막음 - 동기화 잘못 구현시 deadlock에 빠질 수 있음 * Java에서 동기화 구현 - synchronized 수행문 ..
* interrupt() 메서드 - interrupt exception 발생시킴 - join(), sleep(), wait() 메서드로 블럭킹된 Thread를 Exception상태에 빠지게 해 다시 runnable상태로 만들 수 있음 - 예제 #InterruptTest 클래스 package ch15.thread; public class InterruptTest extends Thread { public void run() { int i; for(i=0; i interrupt() 메서드를 호출하지 않으면, sleep(5000)으로 5초 후에 Thread가 종료되지만, interrupt() 메서드를 호출하면 sleep(5000)으로 블락킹 되었던 Thread가 Exception에 떨어지게 된다 * Threa..
* Thread status - Thread가 Start되면, Runnable한 상태가 됨 - Runnable한 상태여야지만 CPU를 점유할 수 있음! [이 때, 스케줄러가 CPU를 배분해줌] - Thread가 종료되면 Dead상태가 됨 - Dead가 아니지만, Not Runnable한 상태가 있다 (CPU 점유불가한 상태) --> 3가지 자바 메서드(sleep(시간) / wait() / join() 메서드)를 호출한 경우로, 각각 시간이 지났을 때 / notify() 메서드 호출 / 조인을 건 다른 Thread가 끝나면 Runnable로 돌아온다 --> Runnable 상태로 못돌아오게 되는 좀비같은 상태에는?! interrupt Exception으로 Exce..
자바의 Thread 클래스를 상속받아 Thread 프로그래밍을 하거나, Runnable 인터페이스 구현하여 가능 Multi Thread 구현 Shared Resource (공유자원) --> 동시에 쓰면 문제가 생길 수 있음 --> syncronization(동기화)로 순서를 맞춰줌 * Thread란? - Process : 프로그램이 메모리에 올라간 상태 - Thread : Process가 실행이 되는 게 아니라, 실행이 되는 단위는 Thread(작업의 단위) / 하나의 프로세스는 하나 이상의 Thread를 가짐 / CPU를 점유해서 돌아감(스케줄러가 Thread에 CPU를 할당) * Thread 구현하기 - 자바의 Thread 클래스 extends(상속) - Runnable ..
* 예외 처리 미루기 - try{}블록으로 예외를 처리하거나, throws를 해서 예외처리를 미룰 수 있다 - 예외처리를 미루면(throws), 메서드를 호출한 곳에서 예외처리를 하게 된다 - main()에서 throws를 하면 가상머신에서 처리되므로 에러발생! * 다중 예외 처리 - 하나의 try{}블록 안에서 여러 블록이 발생하면 catch{}블록 한 곳에서 모두 처리(멀티)하거나, 여러 catch{}블록으로 나눠 처리 가능 - 가장 최상위 Exception 클래스인 Exception클래스는 가장 마지막 블록에 위치해야 함! * 사용자 정의 예외 - JDK 제공 예외 클래스외에, 시스템상 사용자가 필요에 의해서 예외 클래스 정의하여 사용할 수 있음 - 기존 JDK 클래스 상속해 만듦 * 예제 1 # ..
* reduce() 연산 - 정의된 연산이 아닌, 프로그래머가 직접 지정하는 연산을 사용 - 배열의 모든 요소 합을 구하는 reduce연산 --> 연산이 간단하면 직접 구현 --> 연산이 복잡하면 BinaryOperator를 구현한 클래스를 넣으면 됨 * 예제 # ReduceTest 클래스 package ch12.stream; import java.util.Arrays; import java.util.function.BinaryOperator; class CompareString implements BinaryOperator{ @Override public String apply(String s1, String s2) { if(s1.getBytes().length >= s2.getBytes().lengt..