일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- Adapter 패턴
- Play2 로 웹 개발
- 스칼라 동시성
- 블록체인
- 스칼라 강좌
- Akka
- 주키퍼
- 파이썬 동시성
- Play2
- play 강좌
- 파이썬 강좌
- 파이썬
- hyperledger fabric
- 엔터프라이즈 블록체인
- 하이퍼레저 패브릭
- CORDA
- 안드로이드 웹뷰
- 이더리움
- 파이썬 머신러닝
- 스위프트
- akka 강좌
- 하이브리드앱
- Actor
- Golang
- 스칼라
- play2 강좌
- Hyperledger fabric gossip protocol
- 플레이프레임워크
- 파이썬 데이터분석
- 그라파나
- Today
- Total
목록Java (31)
HAMA 블로그
사용법 1 : 클래스의 멤버로 사용 public enum Currency {PENNY, NICKLE, DIME, QUARTER};Currency coin = Currency.PENNY;coin = 1; //compilation error 사용법 2 : 클래스의 멤버로 사용 (값을 지정) public enum Currency {PENNY(1), NICKLE(5), DIME(10), QUARTER(25)}; 사용법 3 : Switch 문의 인자로 사용 Currency usCoin = Currency.DIME; switch (usCoin) { case PENNY: System.out.println("Penny coin"); break; case NICKLE: System.out.println("Nickle c..
Java volatile - volatile 변수를 읽어 들일 때 CPU 캐시가 아니라 컴퓨터의 메인 메모리로 부터 읽어들입니다. 그리고 volatile 변수를 쓸 때에도(write) CPU 캐시가 아닌 메인 메모리에 기록합니다. - non-volatile 변수들은 어느 시점에 Java Virtual Machine(JVM)이 메인 메모리로 부터 데이터를 읽어 CPU 캐시로 읽어 들이거나 혹은 CPU 캐시들에서 메인 메모리로 데이터를 쓰는지(write) 보장해 줄 수 없습니다. - 이때 volatile 을 쓰면, 메모리에 있는 최신의 값을 보기때문에 문제의 소지를 없앨가능성을 높힙니다. - 하지만 모든걸 해결해주진 못합니다. - 멀티쓰레드에서 하나의 volatile 변수를 접근할때, 하나의 쓰레드가 아직 ..
Executors 유틸리티 클래스를 이용하여 각종 쓰레드 풀 생성하기 ExecutorService = Executors.newFixedThreadPool(int nThreads)최대 지정한 개수 만큼의 쓰레드를 가질 수 있는 쓰레드 풀을 생성한다. 실제 생성되는 객체는 ThreadPoolExecutor 객체이다.항상 일정한 스레드 개수를 유지한다. 스레드가 유휴상태이더라도 제거하지 않고 유지한다.다만 작업도중 비정상적으로 스레드가 종료하는 경우에는 스레드를 추가로 생성하며, nThreads 개수보다 1개가 더 생길 수 도 있다. ScheduledExecutorService = Executors.newScheduledThreadPool(int corePoolSize)지정한 개수만큼 쓰레드가 유지되는 스케줄..
(http://tutorials.jenkov.com/java-concurrency/starvation-and-fairness.html 요약 )자바 Starvation 요인 높은 우선순위의 쓰레드가 모든 CPU Time 을 소모한다.쓰레드들은 synchronzed 블럭안에 들어가기위해 무한정 기다리며 블럭된다.무작정 기다리며 wait() 가 불리기를 기다리는 쓰레드. 포인트는 위의 요인들이 발생하는 이유는 무작위로 깨어난다는 점이다. 자바 쓰레드 점유율을 공정하게 만들기다음 코드 블럭을 보자 public class Synchronizer{ public synchronized void doSynchronized(){ //do a lot of work which takes a long time } } 만약 d..
1 번쓰레드가 synchronized 안으로 들어가면 2 번쓰레드는 synchronized 안으로 진입 불가. 1 번쓰레드가 함수자체를 빠져나오면, 그때서야 2번 쓰레드는 함수 진입가능 1 번쓰레드가 synchronized 안으로 들어가면 2 번쓰레드는 synchronized 안으로 진입 불가.1 번쓰레드가 synchronized 를 빠져나오면, 그때서야 2번 쓰레드는 함수 진입가능 1 번쓰레드가 synchronized 안으로 들어가면 2 번쓰레드는 synchronized 안으로 진입 불가.1 번쓰레드가 5초후에 synchronized 를 빠져나오면, 그때서야 2번 쓰레드는 함수 진입가능 1 번쓰레드가 synchronized 안으로 들어가면 , 2번 쓰레드는 synchronized 에 대기하고있다가 1 ..
나중에 또 잊어버리는것을 방지하고자 ;; 시간날때마다 하나씩 정리해둡니다.케이스 1. 스프링 플젝에서 설정을 외부로 빼기위해, 자바 프로퍼티 파일을 사용 - 위의 this 위치에 파일을 생성하여 봅니다. src/main/resources 폴더는 스프링 프로젝트 만들면 자동으로 생기더라구요- 해당 프로젝트를 war 로 만들면 WEB-INF/classes/ 폴더아래에 WMOSConfig.properties 파일이 위치해 있군요. - 클래스 로더를 사용해서 파일을 가져오도록 해봅니다. 테스트) String config ="resources/WMOSConfig.properties"; ..... 어떻게 될까요? 저기에서 ./ 는 WAS 시작된 위치가 현재 디렉토리입니다. 따라서 톰캣을 사용한다면 Tomcat 7...
ClassNotFoundException : 클래스 로더가 클래스 패스에서 해당 클래스를 못 찾으면 발생한다. 이 에러가 발생하면 기본적으로 클래스 패스와 그 패스에 해당 클래스가 존재하는지 확인해야한다. NoClassDefFoundError : 이것이 발생하면 이유를 찾기가 꽤나 골치아퍼 지는데, 이것은 컴파일타임때 요구되는 클래스가 존재하지만 런타임때 클래스들이 바뀌거나, 제거되거나, 클래스의 스태틱 초기화가 예외를 던지면 이것이 발생한다. 먼 소리냐하면 클래스패스에 클래스가 존재하더라도, 이 클래스에 요구되는 클래스들중 하나에 문제가 생겼다는 이야기이다. 따라서 이 클래스와 의존관계를 맺는 모든것들을 살펴봐야한다. 예제 : public class Test1 { } public class Test {..
1. serialize(직렬화) 란? -> 메모리안의 어떠한 (추상적) 데이터구조를 연속된 bit 로 외부에 보내기위해 정렬하는것. 2. 왜 직렬화를 해야하나? -> 물리층 자체가 bit 니깐 / 가장 베이스적인 약속으로서 활용 3. 위에서 외부란 ? -> 파일 / DB / 소켓을 통해 네트워크 외부등 4. 직렬화의 종류는 ? -> 데이터를 어떤식으로 구조화하냐에 따라서 달라짐. 예) 자바직렬화, 구글 프로토콜버퍼 -> 프로토콜버퍼등은 데이터를 짧고 효율적이게 하는게 주목적.반면 자바직렬화는 낭비가 엄청남 5. 직렬화를 활용하는곳? -> 소켓통신, 자바객체를 파일에 저장 ( 파워포인트등의 내용을 파일(ppt) 로 저장할때도 객체직렬화) 6. 직렬화 예제 다음은 int 형을 바이트배열로 직렬화하는 코드에요..
4. 스프링 설정 : 어노테이션 vs XML MyBean.java 가 XML/어노테이션/자바 컨피그레이션을 통해 어떻게 객체로 만들어지는지 살펴보도록하자. ( 1 ) XML 을 통한 설정 Beans:스프링 컨테이너 안에 만들고싶은 자바 클래스들 ("benas") 이다. 두번째 빈은 첫번째 빈을 DI 받고 있다.MyBean.java?1234567891011121314151617181920package com.hmkcode.spring.beans; public class MyBean { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Overrid..
3. 자바 리플렉션으로 어노테이션 다루기 자바 리플렉션을 사용함으로서 런타임에 자바클래스에 정의되있는 어노테이션 정보에 접근할수있다. 클래스 어노테이션 Class aClass = TheClass.class; Annotation[] annotations = aClass.getAnnotations(); for(Annotation annotation : annotations){ if(annotation instanceof MyAnnotation){ MyAnnotation myAnnotation = (MyAnnotation) annotation; System.out.println("name: " + myAnnotation.name()); System.out.println("value: " + myAnnotati..