JVM Synchronization 엑셈컨설팅본부 /APM 팀김정태 1. 개요 본문서는 JAVA 의특징중하나인 Multi Thread 환경에서공유 Resource 에대한 Thread 경합과 Synchronization 에대한내용들이기술되어있다. 본문내용을통해 Java

Size: px
Start display at page:

Download "JVM Synchronization 엑셈컨설팅본부 /APM 팀김정태 1. 개요 본문서는 JAVA 의특징중하나인 Multi Thread 환경에서공유 Resource 에대한 Thread 경합과 Synchronization 에대한내용들이기술되어있다. 본문내용을통해 Java"

Transcription

1 JVM Synchronization 엑셈컨설팅본부 /APM 팀김정태 1. 개요 본문서는 JAVA 의특징중하나인 Multi Thread 환경에서공유 Resource 에대한 Thread 경합과 Synchronization 에대한내용들이기술되어있다. 본문내용을통해 Java 의동기화장치인 Monitor 에대해이해하고나아가 Java 의 Synchronization 을적절하게활용할수있는지식을제공할목적으로작성되었다. 1.1 Java 그리고 Thread WAS(Web Application Server) 에서는많은수의동시사용자를처리하기위해수십 ~ 수백개의 Thread 를사용한다. 두개이상의 Thread 가같은자원을이용할때는필연적으로 Thread 간에경합 (Contention) 이발생하고경우에따라서는 Dead Lock 이발생할수도있다. 웹애플리케이션에서여러 Thread 가공유자원에접근하는일은매우빈번하다. 대표적으로로그를기록하는것도로그를기록하려는 Thread 가 Lock 을획득하고공유자원에접근한다. Dead Lock 은 Thread 경합의특별한경우인데, 두개이상의 Thread 에서작업을완료하기위해서상대의작업이끝나야하는상황을말한다. Thread 경합때문에다양한문제가발생할수있으며, 이런문제를분석하기위해서는 Thread Dump 를이용하기도한다. 각 Thread 의상태를정확히알수있기때문이다. 1.2 Thread 동기화여러 Thread 가공유자원을사용할때정합성을보장하려면동기화장치로한번에하나의 Thread 만공유자원에접근할수있게해야한다. Java 에서는 Monitor 를이용해 Thread 를동기화한다. 모든 Java 객체는하나의 Monitor 를가지고있다. 그리고 Monitor 는하나의 Thread 만소유할수있다. 특정 Thread 가소유한 Monitor 를다른 Thread 가획득하려면해 Part 2 APM 361

2 당 Monitor 를소유하고있는 Thread 가 Monitor 를해제할때까지 Wait Queue 에서대기해야 한다. 1.3 Mutual Exclusion과 Critical Section 공유데이터에다수의 Thread 가동시에접근해작업하면메모리 Corruption 발생할수있다. 공유데이터의접근은한번에한 Thread 씩순차적으로이루어져야한다. 누군가공유데이터를사용할때다른 Thread 들은사용하지못하도록해야하는데예를들면쓰기가능한변수가있다. Heap 에는 Object 의멤버변수 (Member Variable) 가있는데 JVM 은해당 Object 와 Class 를 Object Lock( 광의의개념 ) 을사용해보호한다. Object Lock 은한번에한 Thread 만 Object 를사용하게끔내부적으로 Mutex 같은걸활용한다. JVM 이 Class File 을 Load 할때 Heap 에는 java.lang.class 의 instance 가하나생성되며 Object Lock 은 java.lang.class Object 의 instance 에동기화작업하는것이다. 이 Synchronization 은 DBMS 의 Lock 과좀다르다. Oracle DBMS 의경우 Select 는 Exclusive Lock 을안걸지만 (For update 문제외 ) DML 일경우에는 Exclusive Lock 을건다. 그러나 JAVA 는 Thread 가무슨작업하던말던 Synchronization 이필요한지역에들어가면무조건 Synchronization 을수행한다. 이지역을 Critical Section 이라고하는데 Thread 가이지역에들어가면반드시동기화작업을수행한다. Thread 가 Object 의 Critical Section 에진입할때동기화를수행해 Lock 을요청하는방식이다. Lock 을획득하면 Critical Section 에서작업이가능하며 Lock 획득에실패하면 Lock 을소유한다른 Thread 가 Lock 을놓을때까지대기한다. 그런데 JAVA 는 Object 에대해 Lock 을중복해서획득하는것이가능하다. 즉 Thread 가특정 Object 의 Critical Section 에진입할때마다 Lock 을획득하는작업을다시수행한다는것이다. Object 의 Header 에는 Lock Counter 를가지고있는데 Lock 을획득하면 1 증가, 놓으면 1 감소한다. Lock 을소유한 Thread 만가능하다. Thread 는한번수행에한번의 Lock 만을획득하거나놓을수있다. Count 가 0 일때다른 Thread 가 Lock 을획득할수있고 Thread 가반복해서 Lock 을획득하면 Count 가증가한다. Critical Section 은 Object Reference 와연계해동기화를수행한다. Thread 는 Critical Section 의첫 Instruction 을수행할때참조하는 Object 에대해 Lock 을획득해야한다. Critical Section 을떠날때 Lock 은자동 Release 되며명시적인작업은불 기술백서 White Paper

3 필요하다. JVM 을이용하는사람들은단지 Critical Section 을지정해주기만하면동기화는자 동으로된다는것이다. 1.4 Monitor Java 는기본적으로 Multi Thread 환경을전제로설계되었고동기화문제를해결하기위한기본적인메커니즘제공한다. Java 에서의모든 Object 는반드시하나의 Monitor 를가진다. 위에서설명한 Object Lock 이 Monitor 에해당한다. 특정 Object 의 Monitor 에는동시에하나의 Thread 만이들어갈수 (Enter) 있다. 다른 Thread 에의해이미점유된 Monitor 에들어가고자하는 Thread 는 Monitor 의 Wait Set 에서대기한다. Java 에서 Monitor 를점유하는유일한방법은 Synchronized 키워드를사용하는것인데 Synchronized Statement 와 Synchronized Method 두가지방법이있다. Synchronized Statement 는 Method 내특정 Code Block 에 Synchronized 키워드사용한것인데 Synchronized Statement 를사용하면 Critical Section 에들어가고나올때 Monitor Lock 을수행하는작업이 Byte Code 상에명시적으로나타나는특징이있다. 2. Java 의동기화 (Synchronization) 방법 JAVA 는 Monitor 라는 Synchronization 메커니즘을사용하는데 Monitor 는특정 Object 나특정 Code Block 에걸리는일종의 Lock 이라고생각해도무방하다. JAVA 는 Monitor 를배타적목적 (Mutual Exclusion) 외공동작업 (Cooperation) 을위해서사용하기도한다. 2.1 Synchronized Statement 생략 private int[] intarr = new int[10]; void synchblock() { synchronized (this) { for (int i =0 ; i< intarr.length ; ++i ) { intarr(i) = i; Part 2 APM 363

4 생략 Thread 는 for 구문이실행되는동안 Object 의 Monitor 를점유한다. 해당 Object 에대해 Monitor 를점유하려는모든 Thread 는 for 구문이실행되는동안대기상태 (BLOCKED) 에빠지게된다. 앞서설명했듯이 Byte Code 를보면 MONITORENTER, MONITOREXIT 라는 Code 를볼수있다 ( 생략 ). Synchronized Statement 에서는이를수행하는 Current Object 를대상으로 Monitor Lock 을수행한다. Byte Code 에서 MONITORENTER 가실행되면 Stack 의 Object Reference 를이용해참조된 (this) Object 에대한 Lock 을획득하는작업을수행한다. Lock 을이미획득했다면 Lock Count 를하나증가시키고만약처음 Lock 을획득하는거라면 Lock Count 를 1 로하고 Lock 을소유하게된다. Lock 을획득할상황이아니면 Lock 을획득할때까지 BLOCKED 상태로대기하게된다. MONITOREXIT 가실행되면 Lock Count 를하나감소시키고만약값이 0 에도달하면 Lock 을해제한다. MONITOREXIT 은 Exception 을던지기직전 Critical Section 을빠져나오기위해사용되는데 Synchronized Statement 의사용은내부적으로 try ~ catch 절을사용하는효과가있다고한다. Monitor 에들어간후원하는코드를실행하고다시 Monitor 를빠져나오는것이 Java 가동기화를수행하는방법이라고할수있다. 2.2 Synchronized Method 생략 class SyncMtd { private int[] intarr = new int[10]; synchronized void syncmethod() { for (int i = 0 ; i < intarr.length ; ++i) { intarr[i] = i; 생략 기술백서 White Paper

5 Synchronized Method 는 Method 를선언할때 Synchronized 접근지정자 (Qualifier) 를사용하는방식이다. Synchronized Statement 방식과달리 Byte Code 에 Monitor Lock 관련내용이없다 (MONITORENTER, MONITOREXIT). 왜냐하면 Synchronized Method 에대해 Monitor Lock 의사용여부는 Method 의 symbolic reference 를 resolution 하는과정에서결정되기때문이다. 이는 Method 의내용이 Critical Section 이아니고 Method 의호출자체가 Critical Section 이란것을의미한다. Synchronized Statement 는런타임시점에 Monitor Lock 을획득하는반면 Synchronized Method 는이 Method 를호출하기위해 Lock 을획득해야한다. Synchronized Method 가 Instance Method 라면 Method 를호출하는 this Object 에대해 Lock 을획득해야한다. Class Method(Static Method) 라면이 Method 가속한클래스, 즉해당 Class 의 Class Instance(Object) 에대해 Lock 을획득해야한다. Synchronized Method 가정상실행여부상관없이종료되기만하면 JVM 은 Lock 을자동으로 Release 한다. 2.3 Wait And Notify 한 Thread 는특정데이터를필요로하고다른 Thread 는특정데이터를제공하는경우 Monitor Lock 을사용해 Thread 간 Cooperation 작업을수행할수있다. [ 그림 1] Buffer Field Part 2 APM 365

6 메신저프로그램의경우클라이언트에서네트워크통해상대방의메시지를받는 Listener Thread 와받아온메시지를보여주는 Reader thread 가있다고가정해보자. Reader Thread 는 Buffer 의메시지를유저에게보여주고 Buffer 를다시비우고버퍼에메시지가들어올때까지대기를하게된다. Listener Thread 는 Buffer 에메시지를기록하고어느정도기록끝나면 Reader Thread 에게메시지가들어온사실을알려줘서 Reader Thread 가메시지를읽는작업을수행할수있도록한다. 이때 Thread 간에는 Wait and Notify 형태의 Monitor Lock 을사용한다. Wait 와 Notify Method 를이용해서동기화를수행하는방식은 Synchronized 방식의 " 응용 " 이라고할수있다. [ 그림 2] Wait and Notify 방식 위그림은 Cooperation 을위한 Monitor Lock 을표현한것이다. Reader Thread 는 Monitor Lock 을소유하고있고버퍼를비운다음 wait() 을수행한다. 자신이소유한 Monitor 를잠시놓고이 Monitor 를대기하는 Wait Set 으로들어간다. Listener Thread 는메시지를받고이를유저가읽어야할때쯤 notify() 수행하여 Wait Set 에서나와도된다는신호를알리면 (Lock release 는아니다 ) Reader Thread 가 Monitor Lock 바로획득하지못할수도있다. Listener Thread 가자발적으로 Monitor Lock 을놓지않으면누구도 Lock 을획득하지못한다. Listener Thread 가 notify() 이후 Lock 을놓으면 Reader Thread 는다시 Monitor Lock 을잡으려한다. Thread 간 Cooperation 도 Mutual exclusion 처럼 Object Lock 를사용한다. 즉 Thread 들은특정 Object Class 의 wait(), notify() 등의 Method 를통해 Monitor Lock 을사용하는것이다. Thread 가 Entry set 으로진입하면바로 Monitor Lock 획득을시도한 기술백서 White Paper

7 다. 다른 Thread 가 Monitor Lock 을획득했다면후발 Thread 는다시 Entry set 에서대기해야한다. Monitor Lock 을획득해 Critical Section 코드를수행하는 Thread 는 Lock 을놓고나가는길혹은 Wait set 으로들어가는길이있다. Monitor Lock 을소유한 Thread 가작업수행중 wait() 을수행하면획득했던 Monitor Lock 놓고 Wait set 으로들어간다. 그런데이 Thread 가 wait() 만수행하고 Wait set 으로들어가면이 Monitor Lock 을획득할수있는권한은 Entry set 의 Thread 들에게만주어진다. 그러면 Entry set 의 Thread 들은서로경쟁해 Monitor Lock 의소유자가된다. 따라서 notify(), notifyall() 을수행해야 Entry set 과 Wait set 에있는 Thread 들이경쟁하는셈이다. notify() 는 Wait set 에있는 Thread 중임의의한 Thread 만을 Monitor Lock 경합에참여시키는것이고 notifyall() 은 Wait set 에있는모든 thread 들을경쟁에참여시키는것이다. Wait set 에들어온 Thread 가 Critical Section 을벗어나는방법은 Monitor 를다시획득해 Lock 을놓고나가는방법이외에는없다. 모니터 Lock 은 JVM 을구현한벤더마다다른데 Java 동기화의기본인 Monitor Lock 은성능상의이유로자주사용하지않는것이추세이다. 현재우리가사용하는대부분의 JVM 은앞서말한 Monitor Lock 을 Heavy-weight Lock, Light-weight Lock 으로나누는데 heavy-weight Lock 은 Monitor Lock 과동일한개념으로각 Object 에대해 OS 의 Mutex 와조건변수등으로무겁게구현을하는방식을말하고 lightweight Lock 은 Atomic operation 을이용한가벼운 Lock 으로서 Mutex 와같은 OS 의자원을사용하지않고내부의 Operation 만으로동기화를처리해 Monitor Lock 에비해가볍다는장점이있다. [ 그림 3] Heavy-weight Lock 과 Light-weight Lock Part 2 APM 367

8 light-weight Lock 은대부분의 Object 의경우 Thread 간의경합아발생하지않는다는점에착안하여만약 Thread 간경합없이자신이 Lock 을소유한채다시 Object 의 Critical Section 에진입하면 light-weight Lock 을사용하여 Monitor enter, Monitor exit 를수행한다. 단 Thread 간경합이발생하면이전의 heavy-weight Lock 으로회귀하는구조이다. light-weight Lock 도벤더마다조금씩다르게구현되어있다. 3. Synchronized Statement 와 Synchronized Method 사용 여러 Thread 가동시에 Access 할수있는객체는무조건 Synchronized Statement/Method 로보호해야하는가? 항상그렇지는않다. Synchronized 를수행하는코드와그렇지않은코드의성능차이는대단히큰데동기화를위해 Monitor 에액세스하는작업에는오버헤드가따른다. 반드시필요한경우에만사용해야한다. 아래예제를살펴보자. private static Instance= null; public static Synchronized getinstance() { if(instance== null) { Instance= new Instance(); return instance; Singleton 방식을구현하기위해 getinstance Method 를 Synchronized 로잘보호했지만불필요한성능감소가있다. Instance 변수가실행도중에변경될가능성이없다면위의코드는비효율적이다. 4. Thread 상태 Thread 덤프를분석하려면 Thread 의상태를알아야한다. Thread 의상태는 java.lang.thread 클래스내부에 State 라는이름을가진 Enumerated Types( 열거형 ) 으로선언되어있다 기술백서 White Paper

9 [ 그림 4] Thread Status Diagram NEW: Thread 가생성되었지만아직실행되지않은상태 RUNNABLE: 현재 CPU 를점유하고작업을수행중인상태. 운영체제의자원분배로인해 WAITING 상태가될수도있다. BLOCKED: Monitor 를획득하기위해다른 Thread 가 Lock 을해제하기를기다리는상태 WAITING: wait() Method, join() Method, park() Method 등을이용해대기하고있는상태 TIMED_WAITING: sleep() Method, wait() Method, join() Method, park() Method 등을이용해대기하고있는상태. WAITING 상태와의차이점은 Method 의인수로최대대기시간을명시할수있어외부적인변화뿐만아니라시간에의해서도 WAITING 상태가해제될수있다는것이다. 이상태들에대한정확한이해가 Thread 들간의 Lock 경합을이해하는데필수적이다. 만일특정 Thread 가특정 Object 의 Monitor 를장시간점유하고있다면동일한 Monitor 를필요로하는다른모든 Thread 들은 BLOCKED 상태에서대기를하게된다. 이현상이지나치게되면 Thread 폭주가발생하고자칫 System 장애를유발할수있다. 이런현상은 Wait Method 를이용해대기를하는경우도마찬가지이다. 특정 Thread 가장시간 notify 를통해 Wait 상태의 Thread 들을깨워주지않으면수많은 Thread 들이 WAITING 이나 TIMED_WAITING 상태에서대기를하게된다. Part 2 APM 369

10 5. Thread 의종류 Java Thread 는데몬 Thread(Daemon Thread) 와비데몬 Thread(Non-daemon Thread) 로나눌수있다. 데몬 Thread 는다른비데몬 Thread 가없다면동작을중지한다. 사용자가직접 Thread 를생성하지않더라도 Java 애플리케이션이기본적으로여러개의 Thread 를생성한다. 대부분이데몬 Thread 인데 Garbage Collection 이나, JMX 등의작업을처리하기위한것이다. 'static void main(string[] args)' Method 가실행되는 Thread 는비데몬 Thread 로생성되고, 이 Thread 가동작을중지하면다른데몬 Thread 도같이동작을중지하게되는것이다. 좀더자세히분류하면아래와같다. VM Background Thread: Compile, Optimization, Garbage Collection 등 JVM 내부의일을수행하는 Background Thread 들이다. Main Thread: main(string[] args) Method 를실행하는 Thread 로사용자가명시적으로 Thread 를수행하지않더라도 JVM 은하나의 Main Thread 를생성해서 Application 을구동한다. Hot Spot JVM 에서는 VM Thread 라는이름이부여된다. User Thread: 사용자에의해명시적으로생성된 Thread 들이다. java.lang.thread 를상속 (extends) 받거나, java.lang.runnable 인터페이스를구현 (implements) 함으로써 User Thread 를생성할수있다. 6. JVM 에서의대기현상분석 Java/WAS 환경에서는 OWI 와같은체계적인방법론이존재하지않는다. Java 에서는다양한 방법을제공하고있다 6.1 Java 에서제공하는방법 Thread Dump, GC Dump 와같은기본적인툴 BCI(Byte Code Instrumentation) + JVMPI/JVMTI ( C Interface ) Java 5 에서표준으로채택된 JMX 의 Platform MXBean, JVMpi/ti 를통해얻을수있던정보 쉽게얻을수있지만아직부족한면이많다 기술백서 White Paper

11 6.2 WAS에서제공하는방법대부분의 WAS 들이사용자 Request 를효과적으로처리하기위해 Thread Pool, Connection Pool, EJB Pool/Cache 와같은개념들을구현했는데이런 Pool/Cache 들에서대기현상 (Queuing) 이파악된다. 대부분의 WAS 가이런류의성능정보 (Pool/Cache 등의사용량 ) 를 JMX API 를통해제공 (Expose) 하고마음만먹으면자신만의성능 Repository 를만들수도있다. 6.3 비효율소스튜닝에따른 Side Effect Application 이 Loop 를돌면서 DML 을수행하는구조에서해당작업을여러 Thread 가동시에수행한다고할때 Oracle 튜너가이를파악하고모든 Application 을 Batch Execution 으로변환하게끔 ( 즉, PreparedStatement.addBatch, executebatch 를사용하게끔 ) 유도를하였다. DB 와의통신이획기적으로줄고 DB 작업자체의일량도줄어든다. 즉 Application 입장에서보면 Wait Time(DB I/O Time) 이줄어들기때문에당연히사용자의 Response Time 은감소해야한다. 하지만결과는 Application 에서극단적인성능저하가발생하고말았다. 그이유는두가지가있다. 첫째는 Batch Execution 은 Application 에서더많은메모리를요구한다. 이로인해 Garbage Collection 이왕성하게발생한다. 두번째는 Batch Execution 은한번의 Operation 에 Connection 을보유하는시간이좀더길다. 따라서더많은 Connection 이필요하고그만큼 Connection Pool 이금방소진된다. 즉 Wait Time 을줄이려는시도가다른 Side Effect 를불러오고이로인해다른종류의 Wait Time(GC Pause Time 과 Connection Pool 대기시간 ) 이증가한경우이다. 동기화메커니즘은동시세션 / 사용자 /Thread 를지원하는시스템에서는공통적으로사용된다. WAS Application 에서는수십개 ~ 수백개의 Thread 가동일한자원을획득하기위해경쟁을하는데이과정에서동기화문제가발생하고대기현상 (Wait) 도발생할수있다. 7. Thread Dump Java 에서 Thread 동기화문제를분석하는가장기본적인툴로서현재사용중인 Thread 의상 태와 Stack Trace 를출력하고더불어 JVM 의종류에따라더욱풍부한정보를같이제공한다. Part 2 APM 371

12 7.1 Thread Dump 생성방법 Unix 계열 : kill -3 [PID] Windows 계열 : 현재콘솔에서 Ctrl+Break. 공통 : jstack [PID] 7.2 Thread 덤프의정보 획득한 Thread 덤프에는다음과같은정보가들어있다. "pool-1-thread-13" prio=6 tid=0x a000 nid=0x2fb4 runnable [0x f0f000] java.lang.thread.state: RUNNABLE at java.net.socketinputstream.socketread0(native Method) at java.net.socketinputstream.read(socketinputstream.java:129) at sun.nio.cs.streamdecoder.readbytes(streamdecoder.java:264) at sun.nio.cs.streamdecoder.implread(streamdecoder.java:306) at sun.nio.cs.streamdecoder.read(streamdecoder.java:158) - Locked <0x b7e688> (a java.io.inputstreamreader) at java.io.inputstreamreader.read(inputstreamreader.java:167) at java.io.bufferedreader.fill(bufferedreader.java:136) at java.io.bufferedreader.readline(bufferedreader.java:299) - Locked <0x b7e688> (a java.io.inputstreamreader) at java.io.bufferedreader.readline(bufferedreader.java:362) Thread 이름 : Thread 의고유이름. java.lang.thread 클래스를이용해 Thread 를생성하면 Thread-(Number) 형식으로 Thread 이름이생성된다. java.util.concurrent.threadfactory 클래스를이용했으면 pool-(number)-thread-(number) 형식으로 Thread 이름이생성된다. 우선순위 : Thread 의우선순위 Thread ID: Thread 의 ID. 해당정보를이용해 Thread 의 CPU 사용, 메모리사용등유용한정보를얻을수있다. Thread 상태 : Thread 의상태. Thread 콜스택 : Thread 의콜스택 (Call Stack) 정보 기술백서 White Paper

13 8. Case 별 Synchronized 에대한 Thread Dump 분석 Case1: Synchronized 에의한동기화 public class dump_test { static Object Lock = new Object(); public static void main(string[] args) { new Thread2().start(); try { Thread.sleep(10); catch (Exception ex) { new Thread1().start(); new Thread1().start(); new Thread1().start(); class Thread1 extends Thread { int idx = 1; public void run() { while (true) { Synchronized (dump_test.lock) { // Thread1 은 Synchronized 블록으로인해 Thread2 의작업이끝나기를기다린다. System.out.println(idx++ + " loopn"); class Thread2 extends Thread { public void run() { while(true) { Synchronized(dump_test.Lock) { // Thread2 는 Synchronized 블록을이용해긴 (Long) 작업을수행한다. for(int idx=0; idx<="" idx++)=""> Part 2 APM 373

14 Case2: wait/notify 에의한동기화 public class dump_test2 { static Object Lock = new Object(); public static void main(string[] args) { new Thread2().start(); try { Thread.sleep(10); catch (Exception ex) { new Thread1().start(); new Thread1().start(); new Thread1().start(); class Thread1 extends Thread { int idx = 1; public void run() { while (true) { Synchronized (dump_test2.lock) { System.out.println(idx++ + " loopn"); try { dump_test2.lock.wait(); catch (Exception ex) { // Wait Method 를이용해 notify 가이루어지기를기다린다. class Thread2 extends Thread { public void run() { while (true) { for (int idx = 0; idx < ; idx++) { Synchronized (dump_test2.lock) {dump_test2.lock.notify(); // notify Method 를이용해 WAITING 상태의 Thread 를깨운다 기술백서 White Paper

15 Case1(Synchronized) 에서는 Thread1 이 BLOCKED 상태에있게되며, Case2(Wait/Notify) 에서는 Thread1 이 WATING 상태에있게된다. Java 에서명시적으로 Thread 를동기화시키는방법은이두개의 Case 뿐이다. Thread Pool 동기화에의의한 Thread 대기, JDBC Connection Pool 동기화에의한 Thread 대기, EJB Cache/Pool 동기화에의한 Thread 대기등모든 Thread 대기가이두개의 Case 로다해석가능하다. 위두가지 Case 에대해각벤더별 Thread Dump 에어떻게관찰되는지확인해보자. 8.1 Hot Spot JVM Case1: Synchronized 에의한동기화 Full Thread dump Java HotSpot(TM) 64-Bit Server VM (1.5.0_04-b05 mixed mode): "DestroyJavaVM" prio=1 tid=0x nid=0x1e18 waiting on condition [0x x fbfffd380] "Thread-3" prio=1 tid=0x afedbd330 nid=0x1e27 waiting for Monitor Entry [0x c x c9bb0] at Thread1.run(dump_test.java:22) - waiting to Lock <0x af44195c8> (a java.lang.object) "Thread-2" prio=1 tid=0x afeda6900 nid=0x1e26 waiting for Monitor Entry [0x fc x fc8c30] at Thread1.run(dump_test.java:22) - waiting to Lock <0x af44195c8> (a java.lang.object) "Thread-1" prio=1 tid=0x afeda5fe0 nid=0x1e25 waiting for Monitor Entry [0x ec x ec7cb0] at Thread1.run(dump_test.java:22) - waiting to Lock <0x af44195c8> (a java.lang.object) "Thread-0" prio=1 tid=0x afeda3520 nid=0x1e24 runnable [0x dc x dc6d30] at Thread2.run(dump_test.java:38) - waiting to Lock <0x af44195c8> (a java.lang.object) Part 2 APM 375

16 Synchronized 에의한 Thread 블로킹이발생하는도중의 Thread dump 결과이다. Thread-1, Thread-2, Thread-3 이 "waiting for Monitor Entry" 상태이다. 즉 Synchronized 문에의해블로킹되어 Monitor 에들어가기위해기다리고있는상태다, 이경우 Thread.getState() Method 는 BLOCKED 값을 Return 하는반면 Thread-0 는현재 "runnable" 상태로일을하고있는중이다. 또한 Thread-0 과 Thread1,2,3 이동일한 0x af44195c8 에대해경합을하고있다 Case2: Wait/Nofity 에의한동기화 Full Thread dump Java HotSpot(TM) 64-Bit Server VM (1.5.0_04-b05 mixed mode): "DestroyJavaVM" prio=1 tid=0x nid=0x1c6c waiting on condition [0x x fbfffd380] "Thread-3" prio=1 tid=0x afedb7020 nid=0x1c7b in Object.wait() [0x c x c9db0] at java.lang.object.wait(native Method) - waiting on <0x af4442a98> (a java.lang.object) at java.lang.object.wait(object.java:474) at Thread1.run(dump_test2.java:23) - Locked <0x af4442a98> (a java.lang.object) "Thread-2" prio=1 tid=0x afedb5830 nid=0x1c7a in Object.wait() [0x fc x fc8e30] at java.lang.object.wait(native Method) - waiting on <0x af4442a98> (a java.lang.object) at java.lang.object.wait(object.java:474) at Thread1.run(dump_test2.java:23) - Locked <0x af4442a98> (a java.lang.object) "Thread-1" prio=1 tid=0x afeda6d10 nid=0x1c79 in Object.wait() [0x ec x ec7eb0] at java.lang.object.wait(native Method) - waiting on <0x af4442a98> (a java.lang.object) at java.lang.object.wait(object.java:474) at Thread1.run(dump_test2.java:23) - Locked <0x af4442a98> (a java.lang.object) 기술백서 White Paper

17 "Thread-0" prio=1 tid=0x afeda3550 nid=0x1c78 runnable [0x dc x dc6b30] at Thread2.run(dump_test2.java:36) Hot Spot VM 에서 Wait/Notify 에의한 Thread 블로킹이발생하는도중의 Thread dump 결과이다. Synchronized 에의한 Thread 블로킹의사례와달리 BLOCKED 상태가아닌 WAITING 상태에서대기한다. 여기서특별히주의해야할것은 Thread1,2,3 을실제로블로킹하고있는 Thread 가정확하게어떤 Thread 인지직관적으로알수없다는것이다. Thread1,2,3 은비록대기상태에있지만, 이는블로킹에의한것이아니라단지 Notify 가오기를기다릴 (Wait) 뿐이기때문이다. BLOCKED 상태와 WAITING 상태의정확한차이를이해해야한다. 참고로 BLOCKED 상태와 WAITING 상태의정확한차이를이해하려면다음코드가의미하는 바를이해할필요가있다. Synchronized(LockObject) { LockObject.wait(); dosomething(); 위의코드가의미하는바는다음과같다. Lock Object 의 Monitor 에우선들어간다. Lock Object 에대한점유권을포기하고 Monitor 의 Wait Set( 대기리스트 ) 에서대기한다. 다른 Thread 가 Notify 를해주면 Wait Set 에서나와서다시 Lock Object 를점유한다. 만일다른 Thread 가이미 Lock Object 를점유했다면다시 Wait Set 에서대기한다. Lock Object 를점유한채 dosomething() 을수행하고, Lock Object 의 Monitor 에서빠져나온다. 즉, Lock Object.wait() Method 호출을통해대기하고있는상태에서는이미 Lock Object 에대한점유권을포기한 (Release) 상태이기때문에 BLOCKED 상태가아닌 WAITING 상태로분류되는반면 Synchronized 문장에의해 Monitor 에아직들어가지도못한상태에서는 BLOCKED 상태로분류된다 Part 2 APM 377

18 8.2 IBM JVM IBM JVM 의 Thread Dump 는 Hot Spot JVM 에비해서매우풍부한정보를제공하는데단순 히 Thread 들의현재상태뿐아니라, JVM 의상태에대한여러가지정보를제공한다 Case1: Synchronized 에의한동기화 // 모니터정보 1LKMONPOOLDUMP Monitor Pool Dump (flat & inflated Object-Monitors): 2LKMONINUSE sys_mon_t:0x3003c158 infl_mon_t: 0x : 3LKMONObject Flat Locked by Thread ident 0x08, Entry Count 1 //<-- 오브젝트가 0x08 Thread 에의해 Locking 3LKNOTIFYQ Waiting to be notified: // <-- 세개의 Thread 가대기중 3LKWAITNOTIFY "Thread-1" (0x356716A0) 3LKWAITNOTIFY "Thread-2" (0x356F8020) 3LKWAITNOTIFY "Thread-3" (0x3577FA20) // Java Object Monitor 정보 1LKOBJMONDUMP Java Object Monitor Dump (flat & inflated Object-Monitors): 2LKFLATLockED java.lang.object@ / LKFLATDETAILS Locknflags Flat Locked by Thread ident 0x08, Entry Count 1 // Thread 목록 1LKFLATMONDUMP Thread identifiers (as used in flat Monitors): 2LKFLATMON ident 0x02 "Thread-4" (0x3000D2A0) ee 0x3000D080 2LKFLATMON ident 0x0B "Thread-3" (0x3577FA20) ee 0x3577F800 2LKFLATMON ident 0x0A "Thread-2" (0x356F8020) ee 0x356F7E00 2LKFLATMON ident 0x09 "Thread-1" (0x356716A0) ee 0x LKFLATMON ident 0x08 "Thread-0" (0x355E71A0) ee 0x355E6F80 < / 을점유하고있는 0x08 Thread 의이름이 Thread-0 // Threrad Stack Dump 2XMFULLTHDDUMP Full Thread dump Classic VM (J2RE IBM AIX build ca a (SR3), native Threads): 3XMThreadINFO "Thread-4" (TID:0x300CB530, sys_thread_t:0x3000d2a0, state:cw, native ID:0x1) prio=5 // <-- Conditional Wait 상태 3XHNATIVESTACK Native Stack NULL 기술백서 White Paper

19 3XHSTACKLINE at 0xDB84E184 in xerunjavavarargmethod 3XMThreadINFO "Thread-3" (TID:0x300CB588, sys_thread_t:0x3577fa20, state:cw, native ID:0xA0B) prio=5 4XESTACKTRACE at Thread1.run(dump_test.java:21) 3XMThreadINFO "Thread-2" (TID:0x300CB5E8, sys_thread_t:0x356f8020, state:cw, native ID:0x90A) prio=5 4XESTACKTRACE at Thread1.run(dump_test.java:21) 3XMThreadINFO "Thread-1" (TID:0x300CB648, sys_thread_t:0x356716a0, state:cw, native ID:0x809) prio=5 4XESTACKTRACE at Thread1.run(dump_test.java:21) 3XMThreadINFO "Thread-0" (TID:0x300CB6A8, sys_thread_t:0x355e71a0, state:r, native ID:0x708) prio=5 // <-- Lock 홀더 4XESTACKTRACE at Thread2.run(dump_test.java(Compiled Code)) 3XHNATIVESTACK Native Stack NULL XHSTACKLINE at 0x344DE720 in "Thread-0(ident=0x08)" Thread 가 오브젝트에 대해 Monitor Lock 을점유하고실행 (state:r) 중이며, 나머지세개의 Thread "Thread 1,2,3" 은동일오브젝트에대해 Lock 을획득하기위해대기 (Conditional Waiting) 상태이다 Case2: Wait/Nofity 에의한동기화 Wait/Nofity 에의한동기화에의해 Thread 블로킹이발생하는경우에는한가지사실을제외하고는 Case1 과완전히동일하다. Wait/Notify 에의한동기화의경우실제로 Lock 을점유하고있는 Thread 는존재하지않고, Nofity 해주기를대기할뿐이다. 따라서 Lock 을점유하고있는 Thread 가어떤 Thread 인지에대한정보가 Thread Dump 에나타나지않는다.( 실제로 Lock 을점유하고있지않기때문에 ) 따라서정확한블로킹관계를해석하려면좀더면밀한분석이필요하다. Part 2 APM 379

20 아래내용은 Wait/Notify 에의한 Thread 동기화가발생하는상황의 Thread Dump 의일부이 다. Wait/Notify 에의한 Thread 동기화의경우에는 Lock 을점유하고있는 Thread 의정체를 바로알수없다. ( 블로킹이아닌단순대기이기때문에 ) 1LKMONPOOLDUMP Monitor Pool Dump (flat & inflated Object-Monitors): 2LKMONINUSE sys_mon_t:0x3003c158 infl_mon_t: 0x3003BAC0: 3LKMONObject java.lang.object@30138c58/30138c60: // <-- Object 에대해 Waiting Thread 가존재하지만 Locking 되어있지는않다!!! 3LKNOTIFYQ Waiting to be notified: 3LKWAITNOTIFY "Thread-3" (0x3577F5A0) 3LKWAITNOTIFY "Thread-1" (0x355E7C20) 3LKWAITNOTIFY "Thread-2" (0x356F7A20) 9. Thread Dump 를통한 Thread 동기화문제해결의실사례 실제운영환경에서성능문제가발생한경우에추출한것으로 Thread Dump 를분석한결과 많은수의 Worker Thread 들이다음과같이블로킹되어있었다. "http8080-processor2" daemon prio=5 tid=0x042977b0 nid=0x9a6c in Object.wait() [503f fdb8] at java.lang.object.wait(native Method) - waiting on <0x17c3ca68> (a org.apache.commons.pool.impl.genericobjectpool) at java.lang.object.wait(object.java:429) at org.apache.commons.pool.impl.genericobjectpool.borrowobject(unknown Source) - Locked <0x17c3ca68> (a org.apache.commons.pool.impl.genericobjectpool) at org.apache.commons.dbcp.poolingdriver.connect(poolingdriver.java:146) at java.sql.drivermanager.getconnection(drivermanager.java:512) - Locked <0x507dbb58> (a java.lang.class) at java.sql.drivermanager.getconnection(drivermanager.java:193) - Locked <0x507dbb58> (a java.lang.class) at org.jsn.jdf.db.commons.pool.dbmanager.getconnection(dbmanager.java:40) at org.apache.jsp.managerinfo_jsp._jspservice(managerinfo_jsp.java:71) at org.apache.tomcat.util.threads.threadpool$controlrunnable.run(threadpool.java:683) at java.lang.thread.run(thread.java:534) 기술백서 White Paper

21 "http8080-processor1" daemon prio=5 tid=0x043a4120 nid=0x76f8 waiting for Monitor Entry [4fff000..4fffdb8] at java.sql.drivermanager.getconnection(drivermanager.java:187) - waiting to Lock <0x507dbb58> (a java.lang.class) at org.jsn.jdf.db.commons.pool.dbmanager.getconnection(dbmanager.java:40) at org.apache.jsp.loginok_jsp._jspservice(loginok_jsp.java:130) at org.apache.jasper.runtime.httpjspbase.service(httpjspbase.java:137) at javax.servlet.http.httpservlet.service(httpservlet.java:853) at org.apache.jasper.servlet.jspservletwrapper.service(jspservletwrapper.java:210) at org.apache.jasper.servlet.jspservlet.servicejspfile(jspservlet.java:295) at org.apache.jasper.servlet.jspservlet.service(jspservlet.java:241) at org.apache.tomcat.util.threads.threadpool$controlrunnable.run(threadpool.java:683) at java.lang.thread.run(thread.java:534) 위의 Thread Dump 를분석해보면 java.sql.drivermanager.getconnection() 내부에서 Connection 을얻는과정에서 Synchronized 에의한 Thread 블로킹이발생했다. org.apache.commons.pool.impl.genericobjectpool.borrowobject() 내부에서 Connection 을얻는과정에서 Wait/Notify 에의한 Thread 블로킹이발생했다. 즉, Connection Pool 에서 Connection 을얻는과정에서 Thread 경합이발생한것으로이는현재 Connection Pool 의완전히소진되었고이로인해새로운 DB Request 에대해새로운 Connection 을맺는과정에서성능저하현상이생겼다는것이다. 만일 Connection Pool 의최대 Connection 수가낮게설정되어있다면대기현상은더욱심해질것이다. 다른 Thread 가 DB Request 를끝내고 Connection 을놓을때까지기다려야하기때문이다. 해결책은? Connection Pool 의초기 Connection 수와최대 Connection 수를키운다. 만일실제발생하는 DB Request 수는작은데 Connection Pool 이금방소진된다면 Connection 을닫지않는문제일가능성이크다. 이경우에는소스검증이나모니터링툴을통해 Connection 을열고닫는로직이정상적으로작동하는지검증해야한다. 참고로다행히 ibatis 나 Hibernate 같은프레임워크들이보편적으로사용되면서 JDBC Connection 을잘못다루는문제는거의없어지고있다. Part 2 APM 381

22 참조문헌 김한도. Java Performance Fundamental. 서울 : 엑셈, 기술백서 White Paper

제11장 프로세스와 쓰레드

제11장 프로세스와 쓰레드 제9장자바쓰레드 9.1 Thread 기초 (1/5) 프로그램 명령어들의연속 (a sequence of instruction) 프로세스 / Thread 실행중인프로그램 (program in execution) 프로세스생성과실행을위한함수들 자바 Thread 2 9.1 Thread 기초 (2/5) 프로세스단위작업의문제점 프로세스생성시오버헤드 컨텍스트스위치오버헤드

More information

JVM 메모리구조

JVM 메모리구조 조명이정도면괜찮조! 주제 JVM 메모리구조 설미라자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조장. 최지성자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조원 이용열자료조사, 자료작성, PPT 작성, 보고서작성. 이윤경 자료조사, 자료작성, PPT작성, 보고서작성. 이수은 자료조사, 자료작성, PPT작성, 보고서작성. 발표일 2013. 05.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 2... ( ). ( ). @ vs. logic data method variable behavior attribute method field Flow (Type), ( ) member @ () : C program Method A ( ) Method B ( ) Method C () program : Java, C++, C# data @ Program

More information

02 C h a p t e r Java

02 C h a p t e r Java 02 C h a p t e r Java Bioinformatics in J a va,, 2 1,,,, C++, Python, (Java),,, (http://wwwbiojavaorg),, 13, 3D GUI,,, (Java programming language) (Sun Microsystems) 1995 1990 (green project) TV 22 CHAPTER

More information

6주차.key

6주차.key 6, Process concept A program in execution Program code PCB (process control block) Program counter, registers, etc. Stack Heap Data section => global variable Process in memory Process state New Running

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 4 (Object) (Class) (Instance) (Method) (Constructor) Memory 1 UML 1 @ & 1 (Real World) (Software World) @ &.. () () @ & 2 (Real World) (Software World) OOA/ Modeling Abstraction Instantiation

More information

[Brochure] KOR_TunA

[Brochure] KOR_TunA LG CNS LG CNS APM (TunA) LG CNS APM (TunA) 어플리케이션의 성능 개선을 위한 직관적이고 심플한 APM 솔루션 APM 이란? Application Performance Management 란? 사용자 관점 그리고 비즈니스 관점에서 실제 서비스되고 있는 어플리케이션의 성능 관리 체계입니다. 이를 위해서는 신속한 장애 지점 파악 /

More information

C# Programming Guide - Types

C# Programming Guide - Types C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든

More information

1

1 1 1....6 1.1...6 2. Java Architecture...7 2.1 2SDK(Software Development Kit)...8 2.2 JRE(Java Runtime Environment)...9 2.3 (Java Virtual Machine, JVM)...10 2.4 JVM...11 2.5 (runtime)jvm...12 2.5.1 2.5.2

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 3 if, if else, if else if, switch case for, while, do while break, continue : System.in, args, JOptionPane for (,, ) @ vs. logic data method variable Data Data Flow (Type), ( ) @ Member field

More information

10주차.key

10주차.key 10, Process synchronization (concurrently) ( ) => critical section ( ) / =>, A, B / Race condition int counter; Process A { counter++; } Process B { counter ;.. } counter++ register1 = counter register1

More information

슬라이드 1

슬라이드 1 UNIT 16 예외처리 로봇 SW 교육원 3 기 최상훈 학습목표 2 예외처리구문 try-catch-finally 문을사용핛수있다. 프로그램오류 3 프로그램오류의종류 컴파일에러 (compile-time error) : 컴파일실행시발생 럮타임에러 (runtime error) : 프로그램실행시발생 에러 (error) 프로그램코드에의해서해결될수없는심각핚오류 ex)

More information

C++ Programming

C++ Programming C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout

More information

untitled

untitled Memory leak Resource 力 金 3-tier 見 Out of Memory( 不 ) Memory leak( 漏 ) 狀 Application Server Crash 理 Server 狀 Crash 類 JVM 說 例 行說 說 Memory leak Resource Out of Memory Memory leak Out of Memory 不論 Java heap

More information

PowerPoint Presentation

PowerPoint Presentation Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음

More information

Runtime Data Areas 엑셈컨설팅본부 /APM 팀임대호 Runtime Data Area 구조 Runtime Data Area 는 JVM 이프로그램을수행하기위해할당받는메모리영역이라고할수있다. 실제 WAS 성능문제에직면했을때, 대부분의문제점은 Runtime Da

Runtime Data Areas 엑셈컨설팅본부 /APM 팀임대호 Runtime Data Area 구조 Runtime Data Area 는 JVM 이프로그램을수행하기위해할당받는메모리영역이라고할수있다. 실제 WAS 성능문제에직면했을때, 대부분의문제점은 Runtime Da Runtime Data Areas 엑셈컨설팅본부 /APM 팀임대호 Runtime Data Area 구조 Runtime Data Area 는 JVM 이프로그램을수행하기위해할당받는메모리영역이라고할수있다. 실제 WAS 성능문제에직면했을때, 대부분의문제점은 Runtime Data Area 에서발생하는경우가많다. Memory Leak 이나 Garbage Collection

More information

동기화에의한 Thread Deadlock 엑셈컨설팅본부 /APM 지원팀한승민 개요 Java 객체나 method 의동시성제어를위한동기화기법을잘못사용하였을때나타나는 Thread 간의 Deadlock 으로인한 Transaction 지연상황에대하여살펴보도록하자. 멀티쓰레드환경

동기화에의한 Thread Deadlock 엑셈컨설팅본부 /APM 지원팀한승민 개요 Java 객체나 method 의동시성제어를위한동기화기법을잘못사용하였을때나타나는 Thread 간의 Deadlock 으로인한 Transaction 지연상황에대하여살펴보도록하자. 멀티쓰레드환경 동기화에의한 Thread Deadlock 엑셈컨설팅본부 /APM 지원팀한승민 개요 Java 객체나 method 의동시성제어를위한동기화기법을잘못사용하였을때나타나는 Thread 간의 Deadlock 으로인한 Transaction 지연상황에대하여살펴보도록하자. 멀티쓰레드환경에서공유객체의연산을수행하는블럭에 synchronized 를사용하는경우해당객체의 read, write

More information

WINDOW FUNCTION 의이해와활용방법 엑셈컨설팅본부 / DB 컨설팅팀정동기 개요 Window Function 이란행과행간의관계를쉽게정의할수있도록만든함수이다. 윈도우함수를활용하면복잡한 SQL 들을하나의 SQL 문장으로변경할수있으며반복적으로 ACCESS 하는비효율역

WINDOW FUNCTION 의이해와활용방법 엑셈컨설팅본부 / DB 컨설팅팀정동기 개요 Window Function 이란행과행간의관계를쉽게정의할수있도록만든함수이다. 윈도우함수를활용하면복잡한 SQL 들을하나의 SQL 문장으로변경할수있으며반복적으로 ACCESS 하는비효율역 WINDOW FUNCTION 의이해와활용방법 엑셈컨설팅본부 / DB 컨설팅팀정동기 개요 Window Function 이란행과행간의관계를쉽게정의할수있도록만든함수이다. 윈도우함수를활용하면복잡한 SQL 들을하나의 SQL 문장으로변경할수있으며반복적으로 ACCESS 하는비효율역시쉽게해결할수있다. 이번화이트페이퍼에서는 Window Function 중순위 RANK, ROW_NUMBER,

More information

rmi_박준용_final.PDF

rmi_박준용_final.PDF (RMI) - JSTORM http://wwwjstormpekr (RMI)- Document title: Document file name: Revision number: Issued by: Document Information (RMI)- rmi finaldoc Issue Date: Status:

More information

PowerPoint Presentation

PowerPoint Presentation public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +

More information

untitled

untitled Embedded System Lab. II Embedded System Lab. II 2 RTOS Hard Real-Time vs Soft Real-Time RTOS Real-Time, Real-Time RTOS General purpose system OS H/W RTOS H/W task Hard Real-Time Real-Time System, Hard

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 1,..... @ 1 Green Project 1991 Oak Java 1995. 5 December '90 by Patrick Naughton, Mike Sheridan and James Gosling Embedded in various consumer electronic device 1992. 9. 3 Star 7 1993 www portability

More information

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - CSharp-10-예외처리 10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 Power Java 제 23 장스레드 이번장에서학습할내용 스레드의개요 스레드의생성과실행 스레드상태 스레드의스케줄링 스레드간의조정 스레드는동시에여러개의프로그램을실행하는효과를냅니다. 멀티태스킹 멀티태스킹 (muli-tasking) 는여러개의애플리케이션을동시에실행하여서컴퓨터시스템의성능을높이기위한기법 스레드란? 다중스레딩 (multi-threading) 은하나의프로그램이동시에여러가지작업을할수있도록하는것

More information

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET 135-080 679-4 13 02-3430-1200 1 2 11 2 12 2 2 8 21 Connection 8 22 UniSQLConnection 8 23 8 24 / / 9 3 UniSQL 11 31 OID 11 311 11 312 14 313 16 314 17 32 SET 19 321 20 322 23 323 24 33 GLO 26 331 GLO 26

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 1 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Reasons for Poor Performance Programs 60% Design 20% System 2.5% Database 17.5% Source: ORACLE Performance Tuning 1 SMS TOOL DBA Monitoring TOOL Administration TOOL Performance Insight Backup SQL TUNING

More information

Microsoft PowerPoint - 04-UDP Programming.ppt

Microsoft PowerPoint - 04-UDP Programming.ppt Chapter 4. UDP Dongwon Jeong djeong@kunsan.ac.kr http://ist.kunsan.ac.kr/ Dept. of Informatics & Statistics 목차 UDP 1 1 UDP 개념 자바 UDP 프로그램작성 클라이언트와서버모두 DatagramSocket 클래스로생성 상호간통신은 DatagramPacket 클래스를이용하여

More information

gnu-lee-oop-kor-lec06-3-chap7

gnu-lee-oop-kor-lec06-3-chap7 어서와 Java 는처음이지! 제 7 장상속 Super 키워드 상속과생성자 상속과다형성 서브클래스의객체가생성될때, 서브클래스의생성자만호출될까? 아니면수퍼클래스의생성자도호출되는가? class Base{ public Base(String msg) { System.out.println("Base() 생성자 "); ; class Derived extends Base

More information

JMF3_심빈구.PDF

JMF3_심빈구.PDF JMF JSTORM http://wwwjstormpekr Issued by: < > Revision: Document Information Document title: Document file name: Revision number: Issued by: JMF3_ doc Issue Date:

More information

NoSQL

NoSQL MongoDB Daum Communications NoSQL Using Java Java VM, GC Low Scalability Using C Write speed Auto Sharding High Scalability Using Erlang Read/Update MapReduce R/U MR Cassandra Good Very Good MongoDB Good

More information

How to find bottleneck in J2ee application_first_print

How to find bottleneck in J2ee application_first_print How to find bottleneck in J2EE application 작성자 : 자바스터디네트워크조대협 (bcho@bea.com) J2ee application 을운영하다보면, 시스템이극도로느려지거나, 멈춰버리는현상이생기고는한데, 분명히개발하면서테스트할때는문제가없었는데, 왜이런일이생기고, 어떻게대처해야하는지에대해서알아보도록하자. 일반적으로 J2ee application

More information

Interstage5 SOAP서비스 설정 가이드

Interstage5 SOAP서비스 설정 가이드 Interstage 5 Application Server ( Solaris ) SOAP Service Internet Sample Test SOAP Server Application SOAP Client Application CORBA/SOAP Server Gateway CORBA/SOAP Gateway Client INTERSTAGE SOAP Service

More information

JAVA PROGRAMMING 실습 08.다형성

JAVA PROGRAMMING 실습 08.다형성 2015 학년도 2 학기 1. 추상메소드 선언은되어있으나코드구현되어있지않은메소드 abstract 키워드사용 메소드타입, 이름, 매개변수리스트만선언 public abstract String getname(); public abstract void setname(string s); 2. 추상클래스 abstract 키워드로선언한클래스 종류 추상메소드를포함하는클래스

More information

신림프로그래머_클린코드.key

신림프로그래머_클린코드.key CLEAN CODE 6 11st Front Dev. Team 6 1. 2. 3. checked exception 4. 5. 6. 11 : 2 4 : java (50%), javascript (35%), SQL/PL-SQL (15%) : Spring, ibatis, Oracle, jquery ? , (, ) ( ) 클린코드를 무시한다면 . 6 1. ,,,!

More information

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4 ALTIBASE HDB 6.5.1.5.10 Patch Notes 목차 BUG-46183 DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG-46249 [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4 BUG-46266 [sm]

More information

Chapter #01 Subject

Chapter #01  Subject Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned

More information

Cluster management software

Cluster management software 자바네트워크프로그래밍 (OCJP 국제공인자격취득중심 ) 충북대학교 최민 기본예제 예외클래스를정의하고사용하는예제 class NewException extends Exception { public class ExceptionTest { static void methoda() throws NewException { System.out.println("NewException

More information

Chap7.PDF

Chap7.PDF Chapter 7 The SUN Intranet Data Warehouse: Architecture and Tools All rights reserved 1 Intranet Data Warehouse : Distributed Networking Computing Peer-to-peer Peer-to-peer:,. C/S Microsoft ActiveX DCOM(Distributed

More information

비긴쿡-자바 00앞부속

비긴쿡-자바 00앞부속 IT COOKBOOK 14 Java P r e f a c e Stay HungryStay Foolish 3D 15 C 3 16 Stay HungryStay Foolish CEO 2005 L e c t u r e S c h e d u l e 1 14 PPT API C A b o u t T h i s B o o k IT CookBook for Beginner Chapter

More information

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - Java7.pptx HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)

More information

Spring Boot/JDBC JdbcTemplate/CRUD 예제

Spring Boot/JDBC JdbcTemplate/CRUD 예제 Spring Boot/JDBC JdbcTemplate/CRUD 예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com) Spring Boot, Gradle 과오픈소스인 MariaDB 를이용해서 EMP 테이블을만들고 JdbcTemplate, SimpleJdbcTemplate 을이용하여 CRUD 기능을구현해보자. 마리아 DB 설치는다음 URL 에서확인하자.

More information

PowerPoint Presentation

PowerPoint Presentation public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +

More information

Microsoft PowerPoint - lec12 [호환 모드]

Microsoft PowerPoint - lec12 [호환 모드] 스레드란? 스레드의상태 스레드스케줄링 동기화 스레드그룹 kkman@sangji.ac.kr 2 시작, 실행, 종료의순서를가지는제어흐름단위 단일스레딩시스템 : 오직하나의실행점 멀티스레딩시스템 : 다중의실행점 kkman@sangji.ac.kr 3 Concurrent Programming Multiprogramming System Multiprocessing System

More information

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 8 장클래스와객체 I 이번장에서학습할내용 클래스와객체 객체의일생직접 메소드클래스를 필드작성해 UML 봅시다. QUIZ 1. 객체는 속성과 동작을가지고있다. 2. 자동차가객체라면클래스는 설계도이다. 먼저앞장에서학습한클래스와객체의개념을복습해봅시다. 클래스의구성 클래스 (class) 는객체의설계도라할수있다. 클래스는필드와메소드로이루어진다.

More information

Chap12

Chap12 12 12Java RMI 121 RMI 2 121 RMI 3 - RMI, CORBA 121 RMI RMI RMI (remote object) 4 - ( ) UnicastRemoteObject, 121 RMI 5 class A - class B - ( ) class A a() class Bb() 121 RMI 6 RMI / 121 RMI RMI 1 2 ( 7)

More information

FileMaker 15 ODBC 및 JDBC 설명서

FileMaker 15 ODBC 및 JDBC 설명서 FileMaker 15 ODBC JDBC 2004-2016 FileMaker, Inc.. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 FileMaker FileMaker Go FileMaker, Inc.. FileMaker WebDirect FileMaker, Inc... FileMaker.

More information

11 템플릿적용 - Java Program Performance Tuning (김명호기술이사)

11 템플릿적용 - Java Program Performance Tuning (김명호기술이사) Java Program Performance Tuning ( ) n (Primes0) static List primes(int n) { List primes = new ArrayList(n); outer: for (int candidate = 2; n > 0; candidate++) { Iterator iter = primes.iterator(); while

More information

Microsoft PowerPoint - RMI.ppt

Microsoft PowerPoint - RMI.ppt ( 분산통신실습 ) RMI RMI 익히기 1. 분산환경에서동작하는 message-passing을이용한 boundedbuffer 해법프로그램을실행해보세요. 소스코드 : ftp://211.119.245.153 -> os -> OSJavaSources -> ch15 -> rmi http://marvel el.incheon.ac.kr의 Information Unix

More information

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 객체지향프로그래밍 IT CookBook, 자바로배우는쉬운자료구조 q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 q 객체지향프로그래밍의이해 v 프로그래밍기법의발달 A 군의사업발전 1 단계 구조적프로그래밍방식 3 q 객체지향프로그래밍의이해 A 군의사업발전 2 단계 객체지향프로그래밍방식 4 q 객체지향프로그래밍의이해 v 객체란무엇인가

More information

Result Cache 동작원리및활용방안 엑셈컨설팅본부 /DB 컨설팅팀김철환 개요 ORACLE DBMS 를사용하는시스템에서 QUERY 성능은무엇보다중요한요소중하나이며그 성능과직접적인관련이있는것이 I/O 이다. 많은건수를 ACCESS 해야만원하는결과값을얻을수있는 QUER

Result Cache 동작원리및활용방안 엑셈컨설팅본부 /DB 컨설팅팀김철환 개요 ORACLE DBMS 를사용하는시스템에서 QUERY 성능은무엇보다중요한요소중하나이며그 성능과직접적인관련이있는것이 I/O 이다. 많은건수를 ACCESS 해야만원하는결과값을얻을수있는 QUER Result Cache 동작원리및활용방안 엑셈컨설팅본부 /DB 컨설팅팀김철환 개요 ORACLE DBMS 를사용하는시스템에서 QUERY 성능은무엇보다중요한요소중하나이며그 성능과직접적인관련이있는것이 I/O 이다. 많은건수를 ACCESS 해야만원하는결과값을얻을수있는 QUERY 을실행하게된다면 BLOCK I/O 가많이발생하게된다. 이런이유로 QUERY 의성능은좋지못할것이다.

More information

FileMaker ODBC and JDBC Guide

FileMaker ODBC and JDBC Guide FileMaker 13 5 5 5 6 6 6 7 7 8 8 8 8 9 9 10 10 11 11 12 12 12 12 12 12 13 13 14 14 16 16 18 4 19 19 20 20 21 21 21 23 23 23 23 25 26 26 26 26 27 28 28 28 28 29 31 31 32 33 33 33 33 34 34 35 35 35 36 1

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F > 10주차 문자 LCD 의인터페이스회로및구동함수 Next-Generation Networks Lab. 5. 16x2 CLCD 모듈 (HY-1602H-803) 그림 11-18 19 핀설명표 11-11 번호 분류 핀이름 레벨 (V) 기능 1 V SS or GND 0 GND 전원 2 V Power DD or V CC +5 CLCD 구동전원 3 V 0 - CLCD 명암조절

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

PCServerMgmt7

PCServerMgmt7 Web Windows NT/2000 Server DP&NM Lab 1 Contents 2 Windows NT Service Provider Management Application Web UI 3 . PC,, Client/Server Network 4 (1),,, PC Mainframe PC Backbone Server TCP/IP DCS PLC Network

More information

FileMaker ODBC 및 JDBC 가이드

FileMaker ODBC 및 JDBC 가이드 FileMaker ODBC JDBC 2004-2019 FileMaker, Inc.. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 FileMaker, FileMaker Cloud, FileMaker Go FileMaker, Inc.. FileMaker WebDirect FileMaker,

More information

쉽게 풀어쓴 C 프로그래밊

쉽게 풀어쓴 C 프로그래밊 Power Java 제 27 장데이터베이스 프로그래밍 이번장에서학습할내용 자바와데이터베이스 데이터베이스의기초 SQL JDBC 를이용한프로그래밍 변경가능한결과집합 자바를통하여데이터베이스를사용하는방법을학습합니다. 자바와데이터베이스 JDBC(Java Database Connectivity) 는자바 API 의하나로서데이터베이스에연결하여서데이터베이스안의데이터에대하여검색하고데이터를변경할수있게한다.

More information

Microsoft PowerPoint - o6.pptx

Microsoft PowerPoint - o6.pptx Dining-Philosophers Problem 세마포사용 6.8 모니터 (Monitors) Semaphore chopstick[5] = {1,1,1,1,1 ; // initially all values are 1 Philosopher i while (true) { P(chopStick[i]); // get left chopstick P(chopStick[(i+1)

More information

The Self-Managing Database : Automatic Health Monitoring and Alerting

The Self-Managing Database : Automatic Health Monitoring and Alerting The Self-Managing Database : Automatic Health Monitoring and Alerting Agenda Oracle 10g Enterpirse Manager Oracle 10g 3 rd Party PL/SQL API Summary (Self-Managing Database) ? 6% 6% 12% 55% 6% Source: IOUG

More information

교육2 ? 그림

교육2 ? 그림 Interstage 5 Apworks EJB Application Internet Revision History Edition Date Author Reviewed by Remarks 1 2002/10/11 2 2003/05/19 3 2003/06/18 EJB 4 2003/09/25 Apworks5.1 [ Stateless Session Bean ] ApworksJava,

More information

Commit_Wait / Commit_Logging 두파라미터를통해 Log File Sync 대기시간을감소시킬수있다는것은놀라움과의아함을동시에느낄수있다. 단지파라미터의수정을통해당연히대기해야하는시간을감축한다는것은분명성능을개선해야하는입장에서는놀라운일이될것이다. 반면, 그에따

Commit_Wait / Commit_Logging 두파라미터를통해 Log File Sync 대기시간을감소시킬수있다는것은놀라움과의아함을동시에느낄수있다. 단지파라미터의수정을통해당연히대기해야하는시간을감축한다는것은분명성능을개선해야하는입장에서는놀라운일이될것이다. 반면, 그에따 Commit Wait Class 대기시간감소방안 엑셈컨설팅본부 /DB 컨설팅팀박준연 개요 Wait Class 중 Commit 카테고리에해당하는 Wait Event 에의한대기현상으로 DB 시스템의성능저하현상이발생하는것은종종경험할수있다. 그중대표적인 Wait Event 는 Log File Sync 이다. 실제로대부분의 DB 시스템의 Top 5 Wait Event

More information

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 2012.11.23 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Document Distribution Copy Number Name(Role, Title) Date

More information

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

@OneToOne(cascade = = addr_id) private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a 1 대 1 단방향, 주테이블에외래키실습 http://ojcedu.com, http://ojc.asia STS -> Spring Stater Project name : onetoone-1 SQL : JPA, MySQL 선택 http://ojc.asia/bbs/board.php?bo_table=lecspring&wr_id=524 ( 마리아 DB 설치는위 URL

More information

JAVA PROGRAMMING 실습 09. 예외처리

JAVA PROGRAMMING 실습 09. 예외처리 2015 학년도 2 학기 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우 정수를 0으로나누는경우 배열의크기보다큰인덱스로배열의원소를접근하는경우 파일의마지막부분에서데이터를읽으려고하는경우 예외처리 프로그램에문제를발생시키지않고프로그램을실행할수있게적절한조치를취하는것 자바는예외처리기를이용하여예외처리를할수있는기법제공 자바는예외를객체로취급!! 나뉨수를입력하시오

More information

10.ppt

10.ppt : SQL. SQL Plus. JDBC. SQL >> SQL create table : CREATE TABLE ( ( ), ( ),.. ) SQL >> SQL create table : id username dept birth email id username dept birth email CREATE TABLE member ( id NUMBER NOT NULL

More information

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1); void method() 2); void method1() public class Test 3); args) A 제 10 장상속 예제 1) ConstructorTest.java class Parent public Parent() super - default"); public Parent(int i) this("hello"); super(int) constructor" + i); public Parent(char c) this(); super(char) constructor

More information

No Slide Title

No Slide Title J2EE J2EE(Java 2 Enterprise Edition) (Web Services) :,, SOAP: Simple Object Access Protocol WSDL: Web Service Description Language UDDI: Universal Discovery, Description & Integration 4. (XML Protocol

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 인터페이스, 람다식, 패키지 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 홈네트워킹 public interface RemoteControl { public void turnon(); // 가전제품을켠다. public void turnoff(); // 가전제품을끈다. 인터페이스를구현 public class Television

More information

SRC PLUS 제어기 MANUAL

SRC PLUS 제어기 MANUAL ,,,, DE FIN E I N T R E A L L O C E N D SU B E N D S U B M O TIO

More information

hlogin2

hlogin2 0x02. Stack Corruption off-limit Kernel Stack libc Heap BSS Data Code off-limit Kernel Kernel : OS Stack libc Heap BSS Data Code Stack : libc : Heap : BSS, Data : bss Code : off-limit Kernel Kernel : OS

More information

FileMaker ODBC and JDBC Guide

FileMaker ODBC and JDBC Guide FileMaker 14 5 5 5 5 6 6 6 7 7 7 8 8 8 9 9 10 10 11 11 12 12 12 12 12 13 13 14 15 16 17 18 18 19 19 20 20 20 21 21 21 22 22 22 22 23 24 24 24 24 25 27 27 28 29 29 29 29 30 30 31 31 31 32 1 1 1 1 1 1 1

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 오류처리 손시운 ssw5176@kangwon.ac.kr 오류메시지를분석한다. 오류메시지에서많은내용을알수있다. 2 디버깅 디버거를사용하면프로그램에서쉽게오류를감지하고진단할수있다. 디버거는중단점을설정하여서프로그램의실행을제어할수있으며문장 단위로실행하거나변수의값을살펴볼수있다. 3 이클립스에서디버깅 4 이클립스에서디버깅 5 이클립스의디버깅명령어 6 예외처리

More information

MPLAB C18 C

MPLAB C18 C MPLAB C18 C MPLAB C18 MPLAB C18 C MPLAB C18 C #define START, c:\mcc18 errorlevel{0 1} char isascii(char ch); list[list_optioin,list_option] OK, Cancel , MPLAB IDE User s Guide MPLAB C18 C

More information

Spring Data JPA Many To Many 양방향 관계 예제

Spring Data JPA Many To Many 양방향 관계 예제 Spring Data JPA Many To Many 양방향관계예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com) 엔티티매핑 (Entity Mapping) M : N 연관관계 사원 (Sawon), 취미 (Hobby) 는다 : 다관계이다. 사원은여러취미를가질수있고, 하나의취미역시여러사원에할당될수있기때문이다. 보통관계형 DB 에서는다 : 다관계는 1

More information

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다. Eclipse 개발환경에서 WindowBuilder 를이용한 Java 프로그램개발 이예는 Java 프로그램의기초를이해하고있는사람을대상으로 Embedded Microcomputer 를이용한제어시스템을 PC 에서 Serial 통신으로제어 (Graphical User Interface (GUI) 환경에서 ) 하는프로그램개발예를설명한다. WindowBuilder:

More information

스레드의우선순위 우선순위설정메소드 : void setpriority(int newpriority) newpriority 에설정할수있는등급 : 1( 가장낮은우선순위 ) 부터 10( 가장높은우선순위 ) 가장높은우선순위 : MAX_PRIORITY, 보통우선순위 : NORM_

스레드의우선순위 우선순위설정메소드 : void setpriority(int newpriority) newpriority 에설정할수있는등급 : 1( 가장낮은우선순위 ) 부터 10( 가장높은우선순위 ) 가장높은우선순위 : MAX_PRIORITY, 보통우선순위 : NORM_ 10 초동안사용자가입력하지않으면종료하는예제 ) import javax.swing.joptionpane; class AutoTermination { static boolean inputcheck = false; public static void main(string[] args) throws Exception { FirstThread th1 = new FirstThread();

More information

자바 프로그래밍

자바 프로그래밍 5 (kkman@mail.sangji.ac.kr) (Class), (template) (Object) public, final, abstract [modifier] class ClassName { // // (, ) Class Circle { int radius, color ; int x, y ; float getarea() { return 3.14159

More information

Network Programming

Network Programming Part 5 확장된 Network Programming 기술 1. Remote Procedure Call 2. Remote Method Invocation 3. Object Request Broker 2. Java RMI

More information

Java ~ Java program: main() class class» public static void main(string args[])» First.java (main class ) /* The first simple program */ public class

Java ~ Java program: main() class class» public static void main(string args[])» First.java (main class ) /* The first simple program */ public class Linux JAVA 1. http://java.sun.com/j2se/1.4.2/download.html J2SE 1.4.2 SDK 2. Linux RPM ( 9 ) 3. sh j2sdk-1_4_2_07-linux-i586-rpm.bin 4. rpm Uvh j2sdk-1_4_2_07-linux-i586-rpm 5. PATH JAVA 1. vi.bash_profile

More information

자바-11장N'1-502

자바-11장N'1-502 C h a p t e r 11 java.net.,,., (TCP/IP) (UDP/IP).,. 1 ISO OSI 7 1977 (ISO, International Standards Organization) (OSI, Open Systems Interconnection). 6 1983 X.200. OSI 7 [ 11-1] 7. 1 (Physical Layer),

More information

Microsoft PowerPoint - o6.pptx

Microsoft PowerPoint - o6.pptx Dining-Philosophers Problem 세마포사용 Semaphore chopstick[5] = {1,1,1,1,1} ; // initially all values are 1 Philosopher i while (true) { P(chopStick[i]); // get left chopstick P(chopStick[(i+1) % 5]); // get

More information

* Factory class for query and DML clause creation * tiwe * */ public class JPAQueryFactory implements JPQLQueryFactory private f

* Factory class for query and DML clause creation * tiwe * */ public class JPAQueryFactory implements JPQLQueryFactory private f JPA 에서 QueryDSL 사용하기위해 JPAQuery 인스턴스생성방법 http://ojc.asia, http://ojcedu.com 1. JPAQuery 를직접생성하기 JPAQuery 인스턴스생성하기 QueryDSL의 JPAQuery API를사용하려면 JPAQuery 인스턴스를생성하면된다. // entitymanager는 JPA의 EntityManage

More information

untitled

untitled Push... 2 Push... 4 Push... 5 Push... 13 Push... 15 1 FORCS Co., LTD A Leader of Enterprise e-business Solution Push (Daemon ), Push Push Observer. Push., Observer. Session. Thread Thread. Observer ID.

More information

MasoJava4_Dongbin.PDF

MasoJava4_Dongbin.PDF JSTORM http://wwwjstormpekr Issued by: < > Revision: Document Information Document title: Document file name: MasoJava4_Dongbindoc Revision number: Issued by: < > SI, dbin@handysoftcokr

More information

01-OOPConcepts(2).PDF

01-OOPConcepts(2).PDF Object-Oriented Programming Concepts Tel: 02-824-5768 E-mail: hhcho@selabsoongsilackr? OOP (Object) (Encapsulation) (Message) (Class) (Inheritance) (Polymorphism) (Abstract Class) (Interface) 2 1 + = (Dependency)

More information

1217 WebTrafMon II

1217 WebTrafMon II (1/28) (2/28) (10 Mbps ) Video, Audio. (3/28) 10 ~ 15 ( : telnet, ftp ),, (4/28) UDP/TCP (5/28) centralized environment packet header information analysis network traffic data, capture presentation network

More information

untitled

untitled - -, (insert) (delete) - - (insert) (delete) (top ) - - (insert) (rear) (delete) (front) A A B top A B C top push(a) push(b) push(c) A B top pop() top A B D push(d) top #define MAX_STACK_SIZE 100 int

More information

개요오라클과티베로에서 JDBC 를통해접속한세션을구분할수있도록 JDBC 접속시 ConnectionProperties 를통해구분자를넣어줄수있다. 하나의 Node 에다수의 WAS 가있을경우 DB 에서 Session Kill 등의동작수행시원하는 Session 을선택할수있다.

개요오라클과티베로에서 JDBC 를통해접속한세션을구분할수있도록 JDBC 접속시 ConnectionProperties 를통해구분자를넣어줄수있다. 하나의 Node 에다수의 WAS 가있을경우 DB 에서 Session Kill 등의동작수행시원하는 Session 을선택할수있다. 설치및환경설정 JDBC 접속세션구분 / 확인 2013. 11. 01 개요오라클과티베로에서 JDBC 를통해접속한세션을구분할수있도록 JDBC 접속시 ConnectionProperties 를통해구분자를넣어줄수있다. 하나의 Node 에다수의 WAS 가있을경우 DB 에서 Session Kill 등의동작수행시원하는 Session 을선택할수있다. 사용하기 JEUS 에서설정방법

More information

07 자바의 다양한 클래스.key

07 자바의 다양한 클래스.key [ 07 ] . java.lang Object, Math, String, StringBuffer Byte, Short, Integer, Long, Float, Double, Boolean, Character. java.util Random, StringTokenizer Calendar, GregorianCalendar, Date. Collection, List,

More information

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Crash Unity SDK... Log & Crash Search. - Unity3D v4.0 ios

More information

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D313939392D382E687770>

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D313939392D382E687770> i ii iii iv v vi 1 2 3 4 가상대학 시스템의 국내외 현황 조사 가상대학 플랫폼 개발 이상적인 가상대학시스템의 미래상 제안 5 웹-기반 가상대학 시스템 전통적인 교수 방법 시간/공간 제약을 극복한 학습동기 부여 교수의 일방적인 내용전달 교수와 학생간의 상호작용 동료 학생들 간의 상호작용 가상대학 운영 공지사항,강의록 자료실, 메모 질의응답,

More information

Design Issues

Design Issues 11 COMPUTER PROGRAMMING INHERIATANCE CONTENTS OVERVIEW OF INHERITANCE INHERITANCE OF MEMBER VARIABLE RESERVED WORD SUPER METHOD INHERITANCE and OVERRIDING INHERITANCE and CONSTRUCTOR 2 Overview of Inheritance

More information

<49534F20323030303020C0CEC1F520BBE7C8C4BDC9BBE720C4C1BCB3C6C320B9D7204954534D20BDC3BDBAC5DB20B0EDB5B5C8AD20C1A6BEC8BFE4C3BBBCAD2E687770>

<49534F20323030303020C0CEC1F520BBE7C8C4BDC9BBE720C4C1BCB3C6C320B9D7204954534D20BDC3BDBAC5DB20B0EDB5B5C8AD20C1A6BEC8BFE4C3BBBCAD2E687770> ISO 20000 인증 사후심사 컨설팅 및 ITSM 시스템 고도화를 위한 제 안 요 청 서 2008. 6. 한 국 학 술 진 흥 재 단 이 자료는 한국학술진흥재단 제안서 작성이외의 목적으로 복제, 전달 및 사용을 금함 목 차 Ⅰ. 사업개요 1 1. 사업명 1 2. 추진배경 1 3. 목적 1 4. 사업내용 2 5. 기대효과 2 Ⅱ. 사업추진계획 4 1. 추진체계

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

유니티 변수-함수.key

유니티 변수-함수.key C# 1 or 16 (Binary or Hex) 1:1 C# C# (Java, Python, Go ) (0101010 ). (Variable) : (Value) (Variable) : (Value) ( ) (Variable) : (Value) ( ) ; (Variable) : (Value) ( ) ; = ; (Variable) : (Value) (Variable)

More information

Microsoft PowerPoint - Chapter 6.ppt

Microsoft PowerPoint - Chapter 6.ppt 6.Static 멤버와 const 멤버 클래스와 const 클래스와 static 연결리스트프로그램예 Jong Hyuk Park 클래스와 const Jong Hyuk Park C 의 const (1) const double PI=3.14; PI=3.1415; // 컴파일오류 const int val; val=20; // 컴파일오류 3 C 의 const (1)

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 3 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information

5장.key

5장.key JAVA Programming 1 (inheritance) 2!,!! 4 3 4!!!! 5 public class Person {... public class Student extends Person { // Person Student... public class StudentWorker extends Student { // Student StudentWorker...!

More information

3ÆÄÆ®-11

3ÆÄÆ®-11 Chapter 11 Chapter 12 Chapter 13 Chapter 14 Chapter 15 Chapter 16 Chapter 17 C # N e t w o r k P r o g r a m m i n g Part 3 _ chapter 11 ICMP >>> 430 Chapter 11 _ 1 431 Part 3 _ 432 Chapter 11 _ N o t

More information

Class Loader 엑셈컨설팅본부 /APM 팀김다운 개요 클래스 loader 는자바의기능중하나로써런타임에클래스파일을찾고로딩하는임무를맡는다. WAS 마다 Class Loading 의방식에조금씩차이가있으며, Intermax 설치시에 classpath 옵션을 WAS 에추

Class Loader 엑셈컨설팅본부 /APM 팀김다운 개요 클래스 loader 는자바의기능중하나로써런타임에클래스파일을찾고로딩하는임무를맡는다. WAS 마다 Class Loading 의방식에조금씩차이가있으며, Intermax 설치시에 classpath 옵션을 WAS 에추 Class Loader 엑셈컨설팅본부 /APM 팀김다운 개요 클래스 loader 는자바의기능중하나로써런타임에클래스파일을찾고로딩하는임무를맡는다. WAS 마다 Class Loading 의방식에조금씩차이가있으며, Intermax 설치시에 classpath 옵션을 WAS 에추가함으로서 Class loading 을한다. 이에클래스 loader 의로딩메커니즘을이해하고

More information