실행환경

 Desktop

 조립식

 CPU

 Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz 3.40GHz

 Memory

 8.00 GB

 OS

 Windows 7 Professional K 64bit

 Java

 1.8.0_05

 MySQL

 Ver 14.14 Distrib 5.6.19, for Win64

Handler 사용하기

안드로이드에서는 메인스레드가 아닌 다른 스레드(백그라운드)에서 UI를 건들였을 때 에러가 발생한다. 이는 서로 변경하는 것을 허용하게 되면 동기화 문제가 발생하기 때문이다. 그렇기 때문에 핸들러(Handler)를 사용해서 스레드간에 통신을 할 수 있다.


방법 1

방법 2


방법 3


데몬 스레드(Daemon Thread)

데몬(Daemon): 
리눅스 서버에서 주로 많이 사용되며, 백그라운드 상태에서 대기하고 있다가 처리할 요청이 
발생하거나 조건 상황이 맞으면 작업을 실행하는 프로그램.
(자바를 다루는 기술 vol.1 김병무 지음. 길벗)

즉, 자바에서 데몬 쓰레드로 이와 비슷한 동작을 할 수 있다. 데몬 쓰레드란 다른 쓰레드 일반 쓰레드를 보조하는 역할로 사용한다. 예를 들면 어플리케이션이 실행하는 동안 백그라운드에서 서비스를 제공하는 가비지컬렉터, 워드프로세서에서 정기적으로 파일을 저장하는 자동 저장기능 등을 말할 수 있다. (티스토리에서 글 작성시에 자동저장하는 기능도 데몬 쓰레드?)

사용 방법은 쓰레드를 실행하기 전에 Thread 클래스에서 제공하는 setDaemon(true) 메소드를 호출하면 된다.

특징으로는 일반 쓰레드(main 등)가 모두 종료되면 강제적으로 종료 된다.


식사하는 철학자(Dining Philosopher) 문제 구현하기

이미 java.util.concurrent.Semaphore 로 세마포어를 사용할 수 있지만 직접 만들어 보도록 한다. 이 코드가 세마포어를 구현한 것인지 확실하진 않다. 단지 내가 이해한 세마포어를 구현해보았다. 

+ 세마포어란 하나의 공유변수를 사용하는데 아래 코드는 각 객체안의 변수를 사용하므로 모니터가 맞는것 같다...

코드 : 식사하는 4명의 철학자

DiningTable.java


Chopstick.java


Philosopher.java



결과화면

  



homework_0604.zip


 실행환경

 Desktop

 조립식

 CPU

 Intel(R) Core(TM) i7-3770 3.50GHz

 Memory

 4 GB

 OS

 Window 7 Professional 32bit

 Java

 1.7.0_51

 Android

 SDK : 4.4.2 (KitKat), Google APIs 4.4.2

 TEST : Galaxy S3 4.3(Jelly Bean)

 WebServer

 Apache Tomcat 7.0

 DB

 MySQL 5.6.15


문제점

  • 구글맵에 여러개의 마커를 추가하려고한다.
  • 이동경로를 표시하기 위해 마커를 사용하고, 마커를 찍는 방법은 다른 스레드를 생성하여 실행한다.


해결방안

구글맵의 문제가 아니었다. 안드로이드에서는 화면 UI를 변경하려면 하나의 액티비티에서만 가능하다.

그렇게 때문에 main이 아닌 다른 스레드에서 마커를 찍어주니 에러가 발생하였다.

그래서 Handler를 만들어주고 다른 Thread에서 호출하였다.


+ Recent posts