급 궁금해져서 찾아본 String 클래스의 주소값 확인 방법

System.identityHashCode("~~~~");
위 메소드를 println 해보면 String도 객체 주소값을 찍어볼 수 있다.

 

Posted by 知彼知己百戰不殆
,

Thread 기초

언어/JAVA 2023. 12. 17. 10:44

1. Thread Class와 Runnable Interface 구현 2가지 방법 존재
  - Thread Class 상속 시 다른 Class 상속 불가
  - Runnable Interface 구현 시 다른 Class 상속 가능

Thread 클래스 상속 (출처:Java 18 API docs)
Runnable Interface 구현 시(출처:Java 18 API docs)


출처 : https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/lang/Thread.html

 

Thread (Java SE 18 & JDK 18)

All Implemented Interfaces: Runnable Direct Known Subclasses: ForkJoinWorkerThread A thread is a thread of execution in a program. The Java Virtual Machine allows an application to have multiple threads of execution running concurrently. Every thread has a

docs.oracle.com

2. start()와 run() 호출 차이
  - thread의 run()을 호출하는 것은 class에 선언된 메서드를 호출하는 것
  - start()를 호출하는 것은 새로운 thread가 작업을 실행하는데 필요한 call stack을 생성하고, run()을 호출해서 생성된 call stack에 run()이 첫 번째로 올라가게 됨

테스트용 thread 클래스
run() 메소드 호출(단순 메소드 호출) 시 call stack의 첫 메소드가 main메소드
start() 메소드 호출 시 main 메소드 thread에는 영향을 미치지 않음

3. 데몬 스레드(daemon thread)
  - 일반 스레드의 작업을 돕는 보저 역할
  - 일반 스레드가 종료되면 데몬 스레드는 강제 종료
  - "thread변수명".start(); 를 호출하기 전 "thread변수명".setDaemon(boolean 값); 을 해야 데몬 스레드로 지정

4. sleep() 사용법(?)
  - "thread변수명".sleep(~~); 으로 선언해도 되나 sleep() 메소드는 static 메소드이기 때문에 내가 지정한 스레드가 현재 실행중인 thread가 아니라면 main thread가 영향을 받음
  - Thread.sleep(); 으로 호출해야 의미 전달에 혼선이 없음

Posted by 知彼知己百戰不殆
,
실행 환경 : sql developer에서 조회 시 2분 정도 걸리는 쿼리(1달치 조회 시 약 800만건 조금 넘게 존재)
1. createstatement 후 setFetchSize 설정
2. executeQuery 실행 후 바로 다음 라인에 Fetch Size 콘솔 로그 남김. (executeQuery 바로 윗 줄에는 로그 파일에 조회 날짜 조건 출력)
3. fetch size 확인 로그는 execute 실행 후 한 참 뒤에 콘솔 로그 출력. 콘솔 로그 출력 전에는 결과 출력 file size = 0
4. fetch size 로그 출력 후 바로 file size 증가하는 것 확인.
위의 상황으로 볼 때 rs.next() 시 쿼리를 실행하는 것이 아니라 Statement.executeQuery 실행 시 쿼리 결과 값을 갖고 있는 것으로 추정.(약 800만건의 데이터를 텍스트 파일로 저장 시 약 2.06gb)
그리고 파일 쓰기가 계속 진행되고 있는 동안 로그 파일에 조회 날짜 출력을 안 함
여기서 궁금한 점은 2기가나 되는 데이터를 어디에 들고 있다가 파일로 쓰기 시작하는 것인지 궁금.
 
참고 URL

2. https://www.ibm.com/docs/en/db2-for-zos/11?topic=applications-retrieving-data-from-tables-using-statementexecutequery-method

 

DB2 11 - Java - Retrieving data from tables using the Statement.executeQuery method

To retrieve data from a table using a SELECT statement with no parameter markers, you can use the Statement.executeQuery method. About this taskThis method returns a result table in a ResultSet object. After you obtain the result table, you need to use Res

www.ibm.com

3. https://docs.oracle.com/cd/E11882_01/java.112/e16548/resltset.htm#JJDBC28615

 

Result Set

28/54 17 Result Set Standard Java Database Connectivity (JDBC) features in Java Development Kit (JDK) include enhancements to result set functionality, such as processing forward or backward, positioning relatively or absolutely, seeing changes to the data

docs.oracle.com

 

'언어 > JAVA' 카테고리의 다른 글

String의 JVM에 들어가있는 주소값 출력  (1) 2023.12.17
Thread 기초  (0) 2023.12.17
class 초기화 블럭(initialization block)  (0) 2023.09.10
인스턴스 변수와 this  (0) 2023.09.10
클래스 상속과 메소드 오버라이딩  (0) 2023.05.06
Posted by 知彼知己百戰不殆
,