일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Job
- Android
- workmanager
- Background
- shceduler
- livedatam
- Library
- 빈
- firebase
- alarmanager
- epmty
- jobschduler
- schedule
- jobdispatcher
- PHP
- 검사
- Service
- Today
- Total
목록java (20)
에몽이
출처 : http://winterbe.com/posts/2015/04/07/java8-concurrency-tutorial-thread-executor-examples/ Java 8 병행 지침서의 첫 시작에 눈독을 들인 것을 환영한다. 이 지침서는 병행 프로그래밍을 자바 8에서 어떻게 수행하는지를 이해하기 쉬운 예제 코드를 이용하여 알려준다. Java Concurrency API를 커버하는 지침서의 여러 시리즈 중 첫번째가 이 글이다. 다음 약 15분동안 어떻게 병렬로 스레드와 작업 및 실행자 서비스를 통해 코드를 실행시키는지 알아보게 된다. Part 1. 스레드와 실행자(Threads and Executors) Part 2. 동기화와 락(Synchronization and Locks) Part 3. 원..
1.4에 새롭게 추가된 Assertion이 무엇이며 어떻게 사용하는지에 대해서 살펴본다. Assertion 기본 자바 1.4 버전은 1.3 버전에 보안을 비롯한 다양한 확장 API를 추가하여 그 크기가 방대해졌을 뿐만 아니라 NIO와 로깅 등 새로운 기능을 추가함으로써 완벽한 개발 플랫폼으로 확장되었다. 이러한 새로운 기능들 중에서 자바에서는 전혀 새로운 기능이라고 할 수 있는 게 Assertion 기능이다. Assertion은 무엇인가 JSR(Java Specifiaction Request) 41을 보면 다음과 같이 Assertion에 대해서 정의를 내리고 있다. Assertion은 불리언 식(expression)을 포함하고 있는 문장으로서, 프로그래머는 그 문장이 실행될 경우 불리언 식이 참이라고 단..
자바에는 크게 다음 4개의 List인터페이스의 구현체가 있다. VectorArrayListLinkedListCopyOnWriteArrayList 다른 것들은 자바 초창기때부터 있었기 때문에 어느정도 그 차이점을 알겠는데 ArrayList와 CopyOnWriteArrayList는 그 차이를 잘 모르는 경우가 많다. 일단, ArrayList는 스레드에 안전하게 설계되지 않았다. 그 덕분에 빠르기는 하지만 스레드 처리에 민감한 경우 Vector를 쓰거나 ArrayList를 쓰면서 synchroized를 적절하게 사용해야만 했다. 그러나 이러한 방식은 각각의 스레드가 과도하게 혹은 필요 이상으로 이 synchronized에 따라 멈추거나 기다려야만 하는 상황을 유발시키므로 성능에 안좋은 영향을 미치기도 한다. ..
대부분의 언어에는 Event-Driven으로 구현이 가능해지는 Future나 Promise가 존재한다. 그 중 Java와 Scala에서의 Future와 Promise를 적어보려 한다. Scala에서의 Future[T]는 '언젠가 사용 가능해지는 타입 T의 값', Promise[T]는 '언젠가 얻게 될 타입 T의 값'이라고 할 수 있다. 그래서 Future는 read-only, Promise는 writable하다고 한다. '언젠가'에 대한 행동이므로 비동기적인 처리를 뜻하고, Future를 위한 쓰레드가 필요하다. 자바 5의 Future는 위에서 이야기한 Future와 같다. Callable과 함께 추가되었던 Future는 '언젠가 가지게 되는 타입 T의 값'이다. 하지만 결과를 받아 값을 사용하기 위해서..
자바 프로그래밍을 하다보면 동시에 다른 명령을 여러 개 수행해야 하는 동시성(concurrency)작업을 해야 할 일이 많이 생깁니다. 자바에서는 이러한 동시성작업을 해야하는 멀티쓰레드 환경에서 버그 없이 작성하게 도와주는 많은 객체들이 있습니다. java.util.concurrent 패키지에는 ConcurrentHashMap, ConcurrentLinkedQueue, ConcurrentSkipListMap 등 동시성(concurrency)을 보장하는 다양한 컬랙션을 제공합니다.이번 포스팅에서는 이 중 lock을 관리하는 java.util.concurrent.locks중에서도 ReentrantLock에 대하여 살펴보려합니다. java.util.concurrent.locks의 구현체를 크게 보자면 Lock..
자바 1.2 버전부터 제공되고 있지만 아직 다수의 개발자들이 잘 몰라서 활용을 잘 못하는 기능이 하나 있는데, 그 기능이 바로 쓰레드 단위로 로컬 변수를 할당하는 기능이다. 이 기능은 ThreadLocal 클래스를 통해서 제공되는데, 본 글에서는 ThreadLocal 클래스의 기본적인 사용방법과 활용 방법을 살펴보도록 하겠다. ThreadLocal이란? 일반 변수의 수명은 특정 코드 블록(예, 메서드 범위, for 블록 범위 등) 범위 내에서만 유효하다. { int a = 10; ... // 블록 내에서 a 변수 사용 가능 } // 변수 a는 위 코드 블록이 끝나면 더 이상 유효하지 않다. (즉, 수명을 다한다.) 반면에 ThreadLocal을 이용하면 쓰레드 영역에 변수를 설정할 수 있기 때문에, 특정..
java. 리플렉션(reflection)을 통한 인터페이스(Interface) 동적 구현인터페이스의 타입 정보를 특정할 수 없는 상황에서도 해당 인터페이스를 구현한 객체를 생성할 수 있습니다. 인터페이스와 클래스가 다음과 같이 정의되어 있다고 합시다. 인터페이스입니다. package some.test; public interface SomeInterface{ public int some(); } 클래스입니다. package some.test; public class SomeClass{ public int test( SomeInterface i ){ return i.some(); } } 해당 인터페이스와 클래스의 타입정보를 특정할 수 없는 상황에서도 다음과 같이 인터페이스를 구현한 객체를 생성하고 사용할 ..
자바에서는 스레드를 동기화 하기 위해서 synchronized를 제공한다.스레드는 synchronized 메소드에 들어가기 위해 lock을 얻고 메소드가 끝이나면 lock을 반환한다. 어떠한 스레드가 lock을 얻어 synchronized 메소드를 사용중이면 다른 메소드는 lock이 없으므로 synchronized에 접근할 수 없고, 다른 스레드가 lock을 반환 할 때까지 기다려야 한다. synchronized(..변수..){} 예) 안드로이드 class CBoard extends Activity{ void test_syn() { synchronized(this) //이런식으로 해주어도 된다. this -> 자신 { //코드들 .... .... } }} ///////////////////////////..
자바 5부터 새롭게 추가된 Concurrency API 중에서 Executor, 리턴이 가능한 Callable 및 Future에 대해서 살펴본다. Executor를 이용한 쓰레드 관리 웹 서버와 같이 동시에 다수의 요청을 처리해야 하는 어플리케이션을 개발해야 할 경우 코드는 다음과 같은 형태를 띌 것이다. while(true) { request = acceptRequest(); Runnable requestHandler = new RequestHandler(request); new Thread(requestHandler).start(); } 위 코드가 논리적으로 문제점은 없지만, 다음과 같은 성능상의 문제점을 안고 있다. 소규모의 많은 요청이 들어올 경우 쓰레드 생성 및 종료에 따른 오버헤드가 발생한다...
작년에 했던 프로젝트에서 Spring Annotation과 JAXB Annotation을 사용한 경험이 있습니다. Annotation을 이용해서 객체의 속성을 매핑하는데 유용하게 사용했던 기억이 나네요. 하지만 최근에 Annotation에 대해 공부하면서, Java에서 제공하는 Annotation만으로도 효율적으로 사용할 수 있다는 점이 흥미로웠습니다. 그래서 지금부터 제가 공부한 Java Annotation을 효율적으로 활용할 수 있는 한 가지 예를 공유합니다.1. 어노테이션(@, Annotation)이란?그 예를 살펴보기에 앞서, 먼저 어노테이션이란 무엇인지부터 정리하겠습니다. 어노테이션(Annotation)은 Java 5부터 등장한 기능입니다. Annotation은 사전을 찾아보면 "주석"이라고 나..