Process
프로세스란 어떤 작업이 수행되기 위해 모든 필요한 것을 갖춘 환경이라 할 수 있을 것입니다. 리소스들이 다 준비되어있고 작업 수행을 위한 메모리가 할당되어있는 환경입니다. 하나의 프로세스는 하나의 프로그램이나 어플리케이션으로 보면 쉽습니다. 하지만 어떤 경우에는 여러 개의 프로세스가 실행되면서 하나의 어플리케이션 작업이 수행되는 일도 가능합니다. 이 경우 컴퓨터 하드웨어적으로는 프로세스간의 커뮤니케이션을 돕기위해 IPC(Inter process comunication) 을 운용합니다. 이는 어떤 한 하드웨어내의 프로세스와 프로세스간의 커뮤니케이션이뿐만이 아니라 다른 하드웨어 내부의 프로세스와의 커뮤니케이션에 까지도 사용됩니다.
.
.
Thread
스레드는 프로세스의 내부에 존재하는 작업 수행 환경입니다. 한 어플리케이션내의 하나의 단위 작업을 수행하기 위해 또 하나의 프로세스를 만드는 것은 때때로는 시스템의 자원을 비효율적으로 사용하는 방법일수있습니다. 그를 위해 프로세스로 이미 할당된 메모리나 리소스를 공유하는 작은 개념의 스레드라는 것이 나온 것입니다. 자바의 세계에서 멀티 스레드 작업수행은 지극히 보편화된 개념입니다. 모든 어플리케이션은 적어도 하나이상의 스레드를 가지고 있습니다. 이 스레드를 만드는 두가지 보편적인 방법이 있는데 그 첫째는 Thread라는 이름의 클라스를 이용하는 것이고 둘째는 Runnable interface를 이용하는 것입니다.
먼저 Thread class를 이용한 예를 보면
package Thread; public class HelloThread extends Thread { public void run() { System.out.println("Im am thread!"); } public static void main(String args[]) { HelloThread ht = new HelloThread(); ht.start(); // (new HelloThread()).start(); // 간략화된 코드 }}
1. Thread 의 Subclass인 HelloThread 를 이용하여 Thread 인스턴스를 생성(New) 합니다.
2. start() 메서드를 호출(Runnable) 합니다.
3. 새로운 스레드가 생성되고 스케줄러에 의해 Runnable에서 Running 상태로 이동되면서 run() 메서드가 호출(Running)된다.
* 이때 start() 메서드 대신 run() 메서드를 바로 호출하면 기존 메인 스레드가 계속 동작하게 됩니다.
2. start() 메서드를 호출(Runnable) 합니다.
3. 새로운 스레드가 생성되고 스케줄러에 의해 Runnable에서 Running 상태로 이동되면서 run() 메서드가 호출(Running)된다.
* 이때 start() 메서드 대신 run() 메서드를 바로 호출하면 기존 메인 스레드가 계속 동작하게 됩니다.
public class HelloRunnable implements Runnable { public void run() { System.out.println("I am thread!"); } public static void main(String args[]) { HelloRunnable hr = new HelloRunnable(); Thread t = new Thread(hr); t.start(); // (new Thread(new HelloRunnable())).start(); // 간략화된 코드 }}
1. Runnable 인터페이스를 구현한 클래스 HelloRunnable 을 생성합니다.
2. start() 메서드를 호출(Runnable) 합니다.
.
위에 예에서 본 것처럼 스레드 클래스 또는 Runnable 인터페이스를 구현한 클래스로부터 스레드 객체를 생성하고, start() 메소드를 호출하면 스레드는 시작된다. 새로운 스레드가 생성되고 스케줄러에 의해 Runnable에서 Running 상태로 이동되면서 run() 메서드가 호출(Running)된다.
앞장의 그림에서 보는 것처럼 해당하는 메소드 및 기능에 의하여 스레드의 상태가 이동된다.
2. start() 메서드를 호출(Runnable) 합니다.
.
위에 예에서 본 것처럼 스레드 클래스 또는 Runnable 인터페이스를 구현한 클래스로부터 스레드 객체를 생성하고, start() 메소드를 호출하면 스레드는 시작된다. 새로운 스레드가 생성되고 스케줄러에 의해 Runnable에서 Running 상태로 이동되면서 run() 메서드가 호출(Running)된다.
앞장의 그림에서 보는 것처럼 해당하는 메소드 및 기능에 의하여 스레드의 상태가 이동된다.
Thread Life cycle
1. New: 스래드 객체 생성. 스레드 생명 주기 시작. Instance는 만들어지고 아직 start() 되지않은 상태
2. Runnable: start() 메서드 호출에 의해 Runnable 상태로 이동.
3. Running: 스케쥴러는 Runnable 풀(pool)을 첵크하고 Runnable 상태의 스레드를 Running 상태로 이동시킵니다. run() 메서드가 호출(Running)된다
4. Blocked: Sleep메소드, Wait 메소드, 입출력 요청(I/O request), 수행시 Blocked 상태로 이동합니다.
5. Dead: Run() 이 완료되면 자연스레 스레드는 종료됩니다. 이 상태에서 다시 시작되는 것은 불가능합니다.
2. Runnable: start() 메서드 호출에 의해 Runnable 상태로 이동.
3. Running: 스케쥴러는 Runnable 풀(pool)을 첵크하고 Runnable 상태의 스레드를 Running 상태로 이동시킵니다. run() 메서드가 호출(Running)된다
4. Blocked: Sleep메소드, Wait 메소드, 입출력 요청(I/O request), 수행시 Blocked 상태로 이동합니다.
5. Dead: Run() 이 완료되면 자연스레 스레드는 종료됩니다. 이 상태에서 다시 시작되는 것은 불가능합니다.
기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/jQUERY개발… | 12-27 | 1795 | ||
[채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… | 12-11 | 1304 | ||
53 | [평일주간]100%환급6건,안드로이드,자바,C#,스프링3.2,SQL,힌트/… | 03-15 | 1050 | |
52 | [주말주간]C#, ASP.NET마스터 | 01-31 | 1209 | |
51 | [평일,기업100%환급]SQL기초에서 Schema Object까지 | 01-31 | 1008 | |
50 | [평일야간]HTML5, CSS3,Ajax, jQuery마스터과정 | 01-31 | 904 | |
49 | [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정 | 01-19 | 1211 | |
48 | [평일주간,평일야간,주말]안드로이드개발자과정 | 01-11 | 1071 | |
47 | [평일야간,주말주간]JAVA,Network&WEB&Framework | 01-03 | 1552 | |
46 | 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/jQUERY개발… | 12-27 | 1795 | |
45 | [평일야간,주말]자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis… | 12-19 | 1318 | |
44 | 웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX,JavaScript) | 12-14 | 1311 | |
43 | [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… | 12-11 | 1304 | |
42 | [평일,기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 | 12-09 | 1049 | |
41 | [평일야간]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 | 12-01 | 1213 | |
40 | [기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍(평일주간(단기)… | 12-01 | 1423 | |
39 | [평일야간,주말,주말야간]SQL기초에서실무까지(SQL기초,PLSQL,힌… | 12-01 | 927 |
댓글 없음:
댓글 쓰기