본문 바로가기
반응형

IT/Java394

Thread.run() 과 Thread.start() 차이 Java 에서 Thread 를 사용할 경우가 생기는데,해당 Thread를 만들어서 run이나 start로 실행 시키곤 한다. 둘의 차이에 대해서 정리하고자 포스팅 작성한다.start()runnative 영역에서 새로운 Thread가 생성되며 Thread가 시작되면 run() 메서드가 실행된다.Thread가 생성되지 않으며 그냥 run() 메서드만 실행된다.동일한 객체에서 두번이상 호출 시 IllegalThreadStateException 예외가 발생된다.호출수에 제한없이 계속 호출할 수 있다.멀티쓰레드로 동작한다.싱글쓰레드로 동작한다. 2024. 11. 14.
Synchronized 관련 이번 포스팅에서는 lock 을 걸기 위해 자주 사용하는 Synchronized 에 대해서 예제로 테스트 해볼 것이다. 테스트는 크게 2가지로 진행을 할 예정이고, 각 테스트마다 static 일 경우를 함께 테스트 해볼 것이다. 1. Synchronized Method2. Synchronized Block 1. Synchronized Method 아래와 같이 Synchronized Method 를 만들어 두고 main 클래스에서 동시에 호출을 시켜볼 예정이다.Synchronized Method Synchronized Static Method  public synchronized void run(String id) {     System.out.println(id+ " lock start");      t.. 2024. 11. 13.
생산자(Producer) / 소비자(Consumer) 패턴 Java 를 사용하다보면 multi Thread 를 고려하게 되고,자연스레 트랜잭션이나 동시성 이슈를 고려하게 된다.(해당 내용에 대해서는 아래 참고 포스팅 참고 바람) 이번 포스팅에서는 자바에서 생산자/소비자 패턴(Producer/Consumer Pattern)에 대해 설명을 할 것이다. 소개 멀티스레딩 환경에서 자주 사용되는 디자인 패턴으로, 데이터를 생산하는 생산자 스레드와 소비하는 소비자 스레드 간의 작업을 효율적으로 분배하는 데 유용한 패턴이다. 이 패턴을 통해 작업을 동시에 처리하면서도 공유 자원의 동기화를 통해 데이터의 일관성을 유지할 수 있다.  개요생산자: 데이터를 생성하여 공유 자원(예: 큐)에 넣는다.소비자: 공유 자원에 있는 데이터를 꺼내서 처리힌다.목적: 생산과 소비를 분리하여 서.. 2024. 11. 12.
[Error] white label error page SpringBoot Server 를 run 하고 나니정상적으로 console 에는 run이 되었다.(port 는 기본 8080으로 설정) 그리고 web에서 localhost:8080 을 해보니 아래와 같은 페이지가 나왔다. 그리고 에러 화면을 자세히 보면 아래 404 에러라고 써있다. 해결방법1. localhost:8080 으로 연결 시 기본값인 index.html 파일이 없어서 그렇다.src/main/resources/static 경로에 index.html 파일을 만들어주면 된다. 2. index.html이 아닌 경로에 없는 다른 경로를 기본 경로로 지정을 했다.기본 경로로 바꾸어주거나(1번), 해당 경로의 파일을 생성해준다. 2024. 11. 8.
[Error] Syntax error on token "Invalid Character", delete this token 이클립스에서 개발을 하다가 아래와 같은 에러를 만났다. Syntax error on token "Invalid Character", delete this token 코드를 복붙하거나 오타 등 알수 없는 문자로 인식이 되어 이클립스에서 자체적으로 Syntax 에러를 발생한 것이다. 확인후 다시 수정하거나,동일 증상이 발견되면 Project Clean 을 추천한다. 2024. 11. 1.
[Error] Cannot invoke "java.util.function.Supplier.get()" because "supplier" is null 개발 중에 아래와 같은 에러가 발생하였다.  NullPointerException: Cannot invoke "java.util.function.Supplier.get()" because "supplier" is null. jpa 에서 쿼리 메서드를 사용했고,예를들어 아래와 같은 코드를 했을때 발생한 에러이다. Member member = memberRepository.findById("string").get(); 가져왔는데 데이터가 null이어서 발생한 에러이다. 해결책은 null을 방지하기 위해 orElseGet 를 추가하는것이다.그럼 아래와 같은 코드로 변하면 된다.Member member = memberRepository.findById("string").orElseGet(null); orElse.. 2024. 10. 31.
Virtual Thread 란? 이번 포스팅에서는 Virtual Thread 에 대해서 다뤄볼 것이다.Thread 에 대한 개념은 아래 참고 포스팅 참고 바란다. 우선 위키에서 설명하는 Virtual Thread 란 아래와 같다.컴퓨터 프로그래밍에서 가상 스레드는 런타임 라이브러리 또는 가상 머신에 의해 관리되고 "실제" 운영 체제 스레드와 유사하게 만들어 실행되는 코드이지만 후자보다 훨씬 적은 리소스를 필요로 하는 스레드입니다.https://en.wikipedia.org/wiki/Virtual_thread Virtual thread - WikipediaFrom Wikipedia, the free encyclopedia Computational threads scheduled by a run-time library In computer.. 2024. 10. 30.
콜백 패턴(Callback Pattern) 이전 포스팅에서 전략 패턴에 대해 다룬 포스팅이 있다.자세한 내용은 아래 참고 포스팅 참고 바란다. 이번 포스팅에서 다룰 콜백패턴이란전략패턴과 동일한 패턴이고 이름을 좀 달리 사용한다고 이해하면 쉽다. 우선 콜백이라고 하면 아래 참고 포스팅에서 참고 바란다. 전략패턴의 포스팅을 그대로 가져와서 콜백으로 이름만 변경해서 예제 코드를 만들어줄 것이다.우선 실행할 메서드를 갖고있는 인터페이스를 하나 만들어준다.public interface Callback {     void call();}그리고 공통 로직을 담을 일반 클래스를 하나 만들어준다.@Slf4jpublic class LogTemplate {     public void execute(Callback callback) {          log.i.. 2024. 10. 29.
[Error] argument type mismatch RESTAPI 개발 중에 아래와 같은 에러가 발생하였다. argument type mismatch Database에서 가져오는 데이터와 자바에서 받는 DTO에서 자료형이 다른것은 에러 문구만 봐도 이해가 간다. 하지만 특이 케이스가 있어서 포스팅을 작성한다. 자바 17에서는 Mysql 의 SUM 함수의 결과를 DTO String 으로 잘 받았다.하지만 자바 21에서는 똑같은 코드로 돌리니 위와 같은 에러가 발생하였다.결과를 .getClass() 로 형식을 보니 BigInteger 로 분류가 되었다.Long으로도 받아질 줄 알았는데 Long으로 받아도 마찬가지였다. 결국 Object를 사용하거나 BigInteger로 받아서 해결하였다. 자바 버전이 올라갈수록 자료형에 대해서 엄격해 진다고 들었는데 이것도 .. 2024. 10. 27.
반응형