Multi process
- 동시에 여러 프로그램을 실행 할 수 있다.
- 우리가 사용하고 있는 윈도우 운영체제는 멀티프로세서 지원
- 동시에 여러가지 프로그램을 실행 할 수 있다.
Multi thread
- 하나의 프로그램안에서 여러가지 기능이 동시에 실행 될 수 있다
- 예를 들면 한글프로그램에서 인쇄하기와 문서작성이 동시에 이루어 질 수 있다.
자바에서 멀티스레드 프로그램을 위하여 제공하는 클래스가 Thread.
멀티스레드 프로그래밍을 위하여 Thread 클래스를 확장하여 새로운 클래스를 만들고, run 메소드를 재정의 하여 그 안에 Thread가 해야 할 일을 기술한다. 다른 Thread와 공평하게 동작하고자 하는 문장을 run메소드에 기술한다.
자바는 Multi Thread 프로그램을 위하여 Thread클래스와 Runnable 인터페이스를 제공
자바는 클래스의 다중상속을 지원하지 않으므로 만약 내가 만든 클래스가 멀티 Thread를 지원해야 하고 또 다른 클래스를 확장해야 한다면 Runnable 인터페이스를 이용한다.
또 필요하다면 응급성이 있는 쓰레드에 우선순위를 부여할 수 있다.
setPriority()메소드를 이용합니다. 우선 순위 값은 1~10
1 MIN_PRIORITY
10 MAX_PRIORITY
5 NORM_PRIORITY
t.setRriority(Thread.MAX_PRIORITY);
**Thread는 왜 import를 안 해도 되나?
==> Thread클래스는 java.lang패키지에 있다.
java.lang 패키지는 자바프로그램에서 기본적인 클래스들을 담고 있어서 자동 import 된다.
Multi Thread 프로그래밍 방법
자바가 제공하는 Thread 클래스를 확장하여 새로운 클래스를 만들고,
run( ) 메소드를 재정의 하여 그 안에 공평하게 실행 시키고자 하는 명령어들을 기술한다.
이제 공평하게 실행시키려면 그 클래스의 객체를 생성하고
run( )을 직접 호출하지 않고 start( )를 호출하여 Thread를 가동시킵니다. ==>공평하게 실행시켜주세요.
이것을 Thread를 가동한다고 한다.
만약 run( )을 직접 호출 하면 Thread를 가동(공평하게 실행)하는 것이 아니라 일반 메소드처럼 동작한다.
Thread를 공평하게 실행 시키려면 start 메소드를 호출해야 한다.
실수로 run을 직접 호출 하면, Thread를 가동시키는 것이 아니라 run을 일반 메소드 처럼 취급한다. (순차적 실행)
but, 늘 동일한 순서로 나오는 것은 아니다.
class Person extends Thread
{
private String name;
public Person(String name)
{
this.name = name;
}
public void run()
{
try{
for (int i = 1 ; i <=10 ; i++)
{
System.out.println("Hello"+name+"==>"+i);
Thread.sleep(500);
}
}catch(Exception e){
}
}
}
class ThreadTest
{
public static void main(String[] args)
{
Person p1 = new Person("홍길동");
Person p2 = new Person("이남동");
p1.start();
p2.start();
}
}
만약 우리의 클래스가 이미 있는 다른 클래스를 상속 받아야 하고 멀티 Thread가 되어야 한다면 Runnable 인터페이스를 이용한다.
다른 클래스를 상속 받고, 멀티스레드를 하기 위해서 인터페이스로 확장해서 사용한다.
이 때도 공평하게 동작시키고자 하는 내용은 run메소드를 오버라이딩 하여 그 안에 기술한다.
이 때는 객체를 생성하여 그 객체를 통해 바로 start를 호출 할 수 없다.
Thread 객체로 포장하여 start를 호출해야 한다.
Thread의 우선 순위
- 우선순위를 설정했다고 해서 반드시 먼저 작업이 종료되는 것은 아니다. 가급적 먼저 종료해 달라고 요구 하는 것
void |
setPriority(int newPriority) Changes the priority of this thread. |
Modifier and Type |
Constant Field |
Value |
public static final int |
10 |
|
public static final int |
1 |
|
public static final int |
5 |
출처: <https://docs.oracle.com/javase/8/docs/api/constant-values.html#java.lang.Thread.MAX_PRIORITY>
class Person extends Thread
{
private String name;
public Person(String name)
{
this.name = name;
}
public void run()
{
try{
for (int i = 1 ; i <=5 ; i++)
{
System.out.println("Hello"+name+"==>"+i);
Thread.sleep(100);
}
}catch(Exception e){
}
}
}
class ThreadTest04
{
public static void main(String[] args)
{
Person p1 = new Person("홍길동");
Person p2 = new Person("이남동");
Person p3 = new Person("삼남동");
Person p4 = new Person("김동동");
Person p5 = new Person("박자바");
p1.setPriority(Thread.MIN_PRIORITY);
p2.setPriority(Thread.MIN_PRIORITY);
p3.setPriority(Thread.MIN_PRIORITY);
p4.setPriority(Thread.MIN_PRIORITY);
p5.setPriority(Thread.MAX_PRIORITY);
p1.start();
p2.start();
p3.start();
p4.start();
p5.start();
}
}
(결과값)
Hello홍길동==>1
Hello박자바==>1
Hello김동동==>1
Hello이남동==>1
Hello삼남동==>1
Hello홍길동==>2
Hello이남동==>2
Hello삼남동==>2
Hello김동동==>2
Hello박자바==>2
Hello홍길동==>3
Hello이남동==>3
Hello삼남동==>3
Hello박자바==>3
Hello김동동==>3
Hello홍길동==>4
Hello이남동==>4
Hello삼남동==>4
Hello박자바==>4
Hello김동동==>4
Hello홍길동==>5
Hello이남동==>5
Hello삼남동==>5
Hello박자바==>5
Hello김동동==>5
'Java | spring > Java Basic' 카테고리의 다른 글
Java 파일처리 기본 : 입출력, 스트림 (0) | 2019.05.08 |
---|---|
Thread 사이의 통신, 1:1 동작 멀티쓰레드 (0) | 2019.05.08 |
Java RuntimeException, 자동 예외객체 생성 (0) | 2019.05.08 |
JAVA Exception 예외 처리 (0) | 2019.05.08 |
자료구조, Stack 스택과 큐 Queue (0) | 2019.05.07 |
댓글