2019/03

2019.03.14 - [프로그래밍 노트/JAVA] - [JAVA] 블로킹 방식의 작업 완료 통보_1 (스레드풀_2) 2019.03.16 - [프로그래밍 노트/JAVA] - [JAVA] 블로킹 방식의 작업 완료 통보_2 (스레드풀_3) 2019.03.16 - [프로그래밍 노트/JAVA] - [JAVA] 콜백 방식의 작업 완료 통보 (스레드풀_4) 스레드풀 병렬 작업 처리가 많아지면 스레드 수가 증가되고 그에 따른 스레드 생성과 스케줄링으로 인해 CPU가 바빠져서 메모리 사용량이 늘어난다. (애플리케이션 성능 저하) 따라서 스레드의 폭증을 막으려면 스레드풀(ThreadPool)을 사용해야 한다. 스레드 풀은 작업 처리에 사용되는 스레드를 제한된 개수만큼 정해 놓고 작업 큐(Queue)에 들어오는 작업들을 ..
스레드 그룹 스레드 그룹(ThreadGroup)은 관련된 스레드를 묶어서 관리할 목적으로 이용된다. JVM이 실행되면 system 스레드 그룹을 만들고, JVM 운영에 필요한 스레드들을 생성해서 system 스레드 그룹에 포함시킨다. 그리고 system의 하위 스레드 그룹으로 main을 만들고 메인 스레드를 main 스레드 그룹에 포함시킨다. 모든 스레드는 그룹을 갖으며 스레드 그룹을 명시적으로 선언하지 않으면 자신을 생성한 스레드와 같은 그룹에 속한다. public class ThreadInfoExample { public static void main(String[] args) { AutoSaveThread autoSaveThread = new AutoSaveThread(); autoSaveThrea..
오늘은 많은 것을 하였다.일단 svn server를 설치하였다. (다른 사람이 나의 컴퓨터에서 코드를 관리하기로 했기 때문이다.. 아주 private 하다..)그리고 font와 관련한 공부를 했다. 왜냐하면 PDF를 생성할 때 font 가 중요하기 때문이다. 어쩔때는 한글이 깨지고 어쩔때는 안깨지고.. (영어는 당근 안깨진다..)그래서 시스템에 기본적으로 셋팅되있는 font를 출력하는 프로그램을 만들었다.. (윈도우와 리눅스에서 default로 바라보는 폰트의 경로도 궁금했고, 무슨 font를 갖고있는지 궁금했다..) 윈도우 환경이랑 리눅스 환경에서 PDF 생성 테스트를 하기 위해서 jar로 package하여 테스트를 하기로 마음을 먹었다.그런데.. jar로 패키징 처음부터 난관에 봉착했다.mvn pac..
PMD - 정적 코드 분석PMD(Programming Mistake Detector)를 프로젝트에 적용코드에서 발견된 문제를 보고 하는 오픈 소스 정적 Java 소스 코드 분석기Eclipse [Help] - [Install New Software] - https://dl.bintray.com/pmd/pmd-eclipse-plugin/updates/ 주소 입력 후 다운PMD를 실행하면, 우리가 신경 못쓴 변수명(코딩 컨벤션)이라든지 안티패턴들을 잡아줌. 우리는 사람인지라.. 항상 실수를 한다. 코드를 짜고난 후 정적 코드 분석을 통해서 내가 빼먹은 부분이 있는지를 보는 습관을 들이면 좋을 것 같다는생각을 했다..
PDF 생성과 관련해서 MultiThread 테스트가 필요하였다.테스트 대상이 singleton 이고, @Inject를 하는 부분이 많이 존재하여서 test용 context.xml 를 새로 정의하여 junit을 돌렸다.Thread 생성하는 방법은 기존 Java에서 코딩하는 방식으로 하고 junit을 실행하였는데,, !!!! 먹통!! 이되는 현상이 발생했다..먹통이라하면.. 그냥 반응이 없이 끝나버리는... 로그를 보면 각기 다른 Thread가 생성된 것으로 보이는데 바로 destroy 됬다. (아직도 원인을 찾아보진 못했다.. 나는 일이 많아서...ㅠㅠ) 그래서 MultiThread 테스트 관련해서 구글에 검색을 해보니 goroboUtils 라는 라이브러리를 발견했다.TestRunnable 을 구현해서 ..
AES256 암호화시, Exception이 발생 암호화 확장 정책과 관련된 exception으로 아래 같은 이슈가 존재한다. [자바 암호화 확장 정책 설정 이유] Java의 기본 정책으로 JCE가 128비트만 지원하여 16바이트(128bit)키가 넘어갈 시 오류가 발생 (미 통상법에 의해 자국내에서만 AES256 방식 허용) 오류내용 Unsupported keysize or algorithm parameters. 또는, Illegal key size or default parameters. AES256를 사용하기 위해선 무제한 강도 정책(Unlimited Strength Jurisdiction Policy)을 설정해줘야함 [자바 암호화 확장 정책 설정 방법] jdk 1.6 첨부된 jce_policy-6...
interrupt() 메소드를 이용하여 스레드를 정지시키기 스레드는 자신의 run() 메소드가 모두 실행되면 자동적으로 종료된다. 하지만 실행중인 스레드를 즉시 종료해야 할 때도 필요하다. (stop() 메소드가 존재하였으나, 종료시 자원들이 불안전한 상태로 남겨지기 때문에 deprecated 되었다.)interrupt() 메소드는 스레드가 일시 정지 상태에 있을 때 InterruptedException 예외를 발생 시킨다.이것을 이용하면 run() 메소드를 정상 종료시킬 수 있다. 스레드가 실행 대기 또는 실행 상태에 있을 때 interrupt() 메소드가 실행되면 즉시 InterruptedException 예외가 발생하지 않고, 스레드가 미래에 일시 정지 상태가 되면 InterruptedExcepti..
스레드간 협업(wait, notify, notifyAll) 경우에 따라 두 스레드가 교대로 번갈아가며 실행해야 할 경우가 있다. (정확한 교대작업이 필요한 경우, 한 스레드가 작업이 끝나며 상대방 스레드의 일시정지를 풀어주고 자신은 일시정지로 만들어야 한다.)공유객체 를 사용하여 두 스레드가 작업할 내용을 각각 동기화 메소드로 구분해 놓은 후 한 스레드가 작업이 완료되면 notify()메서드를 호출한다.notify() => 일시 정지 상태에 있는 다른 스레드를 실행 대기 상태로 만듬 wait() => 스레드를 일시 정지 상태로 만듬위 두 메서드는 Thread 클래스가 아닌 Object 클래스에 선언된 메소드이므로 모든 공유 객체에서 호출이 가능하다. (동기화블록에서만 사용 가능) 스레드 작업 내용을 동기..
네트워크 프로그래밍(TCP 소켓) 스레드 병렬 처리 연결시, ServerSocket의 accept()를 실행하거나, 서버 연결 요청을 위해 Socket 생성자 또는 connect()를 실행할 경우 해당 작업이 완료되기 전까지 블로킹(blocking)된다.데이터 통신시에도 InputStream, OutputStream의 read(), write() 메소드는 작업이 끝날 때 까지 블로킹된다. => 결론적으로 ServerScoket과 Socket은 동기(블로킹) 방식으로 구동된다. 이렇게 동작할때의 문제점은, 서버 애플리케이션은 지속적으로 클라이언트의 연결 수락 기능을 해야하는데, 입출력에서 블로킹되면 이 작업을 할 수 없게된다. 또한 클라이언트1과 입출력하는 동안 클라이언트2와 입출력을 할 수 없게된다. 그..
다른 스레드의 종료를 기다림(join()) 스레드는 다른 스레드와 독립적으로 실행되는 것이 일반적이지만, 다른 스레드가 종료될 때까지 기다리다가 실행되야되는 경우가 발생할 수 있다.예를 들어 B라는 스레드는 계산을하는 스레드이고, A라는 스레드는 B스레드가 계산이 끝나면 그 결과값을 가지고 로직을 처리해야하는 상황이다.이 와같은 상황은 아래와 같은 코드를 이용해 구현할 수 있다.(join() 이용) ThreadA{ threadB.start(); // ThreadB 실행 (실행순서 1) threadB.join(); // 일시정지 ...ThreadA의 로직 수행 ; // (실행순서 3) } ThreadB{ run(){ // ThreadB 작업 실행(실행순서 2) } } ThreadA가 ThreadB의 joi..
깡냉쓰
'2019/03 글 목록 (4 Page)