MapleStory Cookie With Halo

☕ JAVA/☕ Class & Method 71

[JAVA][Thread]wait() & notify()

💡 wait() & notify() 동기화의 단점인 비효율성(한번에 한개를 처리하기에)을 보완하기 위해 사용된다.Object클래스에 정의되어 있으며, 동기화 블록 내에서만 사용할 수 있다.2024.12.09 - [☕ 자바 JAVA/☕ 클래스와 함수 Class & Method] - [JAVA][Thread]동기화 synchronizationwait()객체의 lock을 풀고, 쓰레드를 해당 객체의 waiting pool에 넣는다.notify()waiting pool에서 대기중인 쓰레드 중 하나를 깨운다.notifyAll()waiting pool에서 대기중인 모든 쓰레드를 깨운다.일반적으로는 notify()보다 notifyAll()을 사용하는 것이 좋다. 예제 내용이 어려웠는데 notify()가 대기중인 쓰..

[JAVA][Thread]동기화 synchronization

💡 쓰레드 동기화Thread synchronization한 쓰레드가 진행중인 작업을 다른 쓰레드가 간섭하지 못하게 하는 것을 말한다.멀티 쓰레드에서는 다른 쓰레드의 작업에 영향을 미칠 수 있다.진행중인 작업이 간섭 받지 않게 하려면 '동기화'가 필요하다.동기화하려면 간섭받지 않아야 하는 문장을 '임계 영역critical section'으로 설정한다.임계영역은 락Rock(자물쇠)을 얻은 단 하나의 쓰레드만 출입가능하다.(객체 1개당 락 1개) synchronized를 이용한 동기화→ 임계영역 만들기💡 임계영역은 갯수와 영역을 최소화해야 한다.때문에 메소드 전체 사용을 지양해야 한다.따라서 위의 2번째를 권장한다.  예제1spendMoney100()메서드에 synchronized를 붙여 임계영역을 만들었..

[JAVA][Thread]join() & yield()

join(): 지정된 시간동안 특정 쓰레드의 작업을 기다린다.void join()작업이 모두 끝날 때까지void join(long millis)천분의 1초 동안 (1000 = 1초)void join(long millis, in nanos)천분의 1총 + 나노초 동안InterruptedException 처리 필수❗만약 join()을 사용하지 않으면❓main쓰레드가 th1과 th2를 기다리지 않고 중간에 실행되는 것이 확인된다.  yield(): 남은 시간을 다음 쓰레드에게 양보한다.실제 쓰레드의 실행시간은 OS스케줄러가 관리하기에 크게 차이는 없지만yield()와 interrupt()를 적절히 사용하면, 응답성과 효율을 높일 수 있다.위 코드는 while(true)이고 if(false)일 경우 쓰레드는 하..

[JAVA][Thread]suspend() resume() stop(). 일시정지, 재개, 완전정지

suspend()resume()stop()메서드설명void suspend()쓰레드 일시정지.void resume()suspend()에 의해 일시정지된 쓰레드를 실행대기상태로 만든다.void stop()쓰레드 즉시 종료.❗ 이 세가지 메서드 모드 deprecated되었다. 사용을 권장하지 않는다.이유는 dead-lock 교착상태 위험이 있기 때문이다.  deprecated된 메서드들 이기에 경고문구가 뜬다.  위의 코드를 개선한 코드 참조영상

[JAVA][Thread]상태와 실행제어. sleep() & interrupt()

쓰레드의 상태상태설명NEW쓰레드가 생성되고 아직 start()가 호출되지 않은 상태.RUNNABLEstart()한 상태. 실행 중 또는 실행 가능한 상태.BLOCKED동기화 블럭에 의해서 일시정지된 상태(lock이 풀릴 때까지 기다리는 상태)WAITING, TIMED_WAITING쓰레드의 작업이 종료되지는 않았지만 실행가능하지 않은(unrunnable) 일시정지 상태.TIME_WAITING은 일시정지 시간이 지정된 경우를 의미한다.TERMINATED쓰레드의 작업이 종료된 상태.  쓰레드의 실행제어메서드설명static void sleep(long millis)static void sleep(long millis, int nanos)지정된 시간동안 쓰레드가 잠든다(일시정지).시간이 지나면 자동으로 다시 실행..

[JAVA][Thread]Daemon Thread 데몬 쓰레드

데몬 쓰레드: 일반 쓰레드의 작업을 돕는 보조적인 역할을 수행한다.→ 따라서 일반 쓰레드가 종료되면 자동 종료된다.가비지 컬렉터, 자동저장, 화면 자동갱신 등에 사용된다.무한루프와 조건문을 이용해서 싱행 후 대기하다가, 특정조건if()이 만족되면 작업을 수행하고 다시 대기한다. 데몬 쓰레드 만들기thread.setDaemon(true); DaemonThread_Ex1 클래스는 Runnable 인터페이스를 상속 받은 쓰레드이다.new Thread안에 이 클래스를 넣고 쓰레드를 만들었다.setDaemone(True)로 데몬쓰레드로 만들었다.start()하면 아래 run()이 실행된다.for문에서는 1초마다 i를 출력하고 잇는데i == 5가 되면 autuSave가 true가 되어 run() 안의 autoSav..

[JAVA][Thread]우선순위

💡쓰레드의 우선순위 Priority of thread프로세스 내  쓰레드들의 작업 중요도에 따라 우선순위를 다르게 한다.→ 특정 쓰레드가 더 많은 작업시간을 갖게 한다.이 우선순위를 전달하면 OS스케쥴러는 참고만 한다.→ 우선순위대로 잘 되지 않는다.   우선순위를 정해보자.getPriority() : 우선순위를 반환한다.💡 쓰레드의 우선순위는 10까지 있다.기본 우선순위는 5이다.숫자가 높을 수록 우선순위가 높다.   쓰레드 그룹: 서로 관련된 쓰레드를 그룹으로 묶는다.모든 쓰레드는 반드시 하나의 쓰레드 그룹에 포함되어 있어야 한다.쓰레드 그룹을 지정하지 않으면 'main쓰레드 그룹'에 속한다.자신을 생성한 쓰레드(부모 쓰레드)의 그룹과 우선순위를 상속받는다.getThreadGroup() : 쓰레드..

[JAVA][Thread]main쓰레드, join(), I/O Blocking

main쓰레드: main메서드의 코드를 수행하는 쓰레드.쓰레드에는 두가지 종류가 있다.사용자 쓰레드→ main쓰레드가 여기 속한다.데몬 쓰레드 (보조 쓰레드)❗ 실행 중인 사용자 쓰레드가 하나도 없을 때 프로그램은 종료된다.  join(): 쓰레드 작업이 끝날 때까지 기다려준다.  main쓰레드가 끝나도실행중인 쓰레드가 끝나야 프로그램이 종료된다. 💡싱글 쓰레드와의 차이 💡Context Switching멀티 쓰레드에서 작업을 번갈아가면서 진행할 때A작업 → B작업, B작업 → A작업으로 오고갈 때를 말한다.이 때문에 싱글 쓰레드보다 멀티 쓰레드는 작업에 시간이 조금 더 걸린다.  쓰레드의 I/O blocking: 쓰레드 입출력시 작업중단.  싱글 쓰레드 중에는 I/O Blocking이 발생하면 작업이..

[JAVA]java.util.function 패키지

시작 전 이 포스트에 나오는 람다식과 함수형 인터페이스가 무엇인 지 모르겠다면❓2024.12.11 - [💬 프로그래밍 표현식] - [Lambda]람다식2024.12.11 - [💬 프로그래밍 표현식] - [Lambda]함수형 인터페이스 FunctionalInterface  java.util.function: 자주 사용되는 다양한 함수형 인터페이스 모음.함수형 인터페이스메서드설명 java.lang.Runnablevoid run()매개변수❌ 반환 ❌SupplierT get()매개변수❌ 반환⭕Consumervoid accept(T t)매개변수⭕ 반환 ❌FunctionR apply(T t)매개변수⭕ 반환 ⭕ .일반적인 함수.Predicateboolean test(T t)매개변수⭕ boolean반환 ⭕   Bi..

반응형