Java(50)
-
[Java] synchronized에 대해서 모르겠는 점
public class ThreadA { public static void main(String[] args) { ThreadB b = new ThreadB(); b.start(); synchronized (b) { try { System.out.println("B가 끝날 때까지 기다립시다."); b.wait(); } catch (InterruptedException e) { throw new RuntimeException(e); } System.out.println(b.total); } } } 왜 synchronized (b)를 넣어주는 것일까? Reference https://school.programmers.co.kr/learn/courses/9/lessons/278 프로그래머스 코드 중심의 개발자..
2023.09.08 -
[Java] 쓰레드의 상태
Runnable, Running, Blocked 상태가 있다. Runnable도 start가 되어야 하는 상태이다. runnable과 running에서 blocked는 sleep과 wait으로 갈 수 있다. blocked에서 다시 돌아오기 위해서는 sleep은 스스로 돌아올 수 있고 wait은 notify로 깨워줘야만 가능하다. yield는 다른 쓰레드에게 자신의 권리를 넘겨주는 것이다. join은 해당 쓰레드가 종료될 때까지 기다린다. ex) thread.join();
2023.09.08 -
[Java] 쓰레드 공유 객체와 동기화
공유 객체는 쓰레들 간에 공유하는 변수이다. 동기화를 하게 되면(synchronized) 한 것끼리는 lock이 걸려 그 코드 범위(메소드가 될 수도 있고 한줄이 될 수도 있다)가 끝날 때까지는 동기화를 건 다른 쓰레드로 넘어가지 않는다. Reference https://school.programmers.co.kr/learn/courses/9/lessons/274
2023.09.08 -
[Java] Math 패키지
생성자가 private으로 되어 있어서 new로 객체를 생성할 수 없다. 그러나 필드와 메소드가 static으로 되어 있어서 class.으로 바로 사용할 수 있다.
2023.09.06 -
[Java] String의 문제점
반복문 안에서 str += "*"를 실행할 시 내부적으로 StringBuffer를 만들고 둘을 붙여주는 작업을 하기에 성능상 불리해진다. 따라서 StringBuffer 객체를 만들고 append하는 코드로 for문 안에 대체해주어야 한다.
2023.09.06 -
[Java] method chaining
method를 통해 자기 자신을 수정하고 이를 return하는 방법
2023.09.06