• 회원가입
  • 로그인
  • 구글아이디로 로그인

[class] Java - Threads (쓰레드)

626  
목차
  1. Thread 정의
  2. Thread 생성
  3. Thread 실행
  4. extends (상속) / implements (구현)
  5. 동시성 문제

 

Thread 정의

 

프로그램 실행 흐름의 단위.

 


 

여려 thread 사용 시, 프로그램이 동시에 여러 작업 효율적 수행 가능.

즉, 메인 프로그램 중단 없이 백그라운드에서 복잡한 작업 수행 가능.

 

 

Thread 생성

[방법1] Thread 클래스 상속 후,  run() 메서드 재정의.


public class Hz extends Thread {

  public void run() {

    System.out.println("이 코드는 thread에서 작동 중임.");

  }

}

 


[방법2] Runnable 인터페이스 구현 후, run() 메서드 재정의.

 

public class Hz implements Runnable {

  public void run() {

    System.out.println("이 코드는 thread에서 작동 중임.");

  }

}

 

 

Thread 실행

[Thread 클래스 상속 방식 경우]

 

thread는 클래스의 인스턴스 생성해 start() 메서드 호출 시 실행됨.

(예제)

 

public class Hz extends Thread {

  public static void main(String[] args) {

    Hz thread = new Hz();

    thread.start();

    System.out.println("홈짱닷컴 : thread 밖에 위치.");

  }

  public void run() {

    System.out.println("Homzzang.com : thread 안에서 실행 중.");

  }

 

결과값:

홈짱닷컴 : thread 밖에 위치.

Homzzang.com : thread 안에서 실행 중.


[Runnable 인터페이스 구현 방식 경우]

 

thread는 클래스의 인스턴스를 Thread 객체의 생성자에게 전달해 thread의 start() 메서드를 호출함으로써 실행됨.

(예제)

 

public class Hz implements Runnable {

  public static void main(String[] args) {

    Hz obj = new Hz();

    Thread thread = new Thread(obj);

    thread.start();

    System.out.println("홈짱닷컴 : thread 밖에 위치.");

  }

  public void run() {

    System.out.println("Homzzang.com : thread 안에서 실행 중.");

  }

}

 

결과값:

홈짱닷컴 : thread 밖에 위치.

Homzzang.com : thread 안에서 실행 중. 

 

extends (상속) / implements (구현)

[Thread 클래스 상속 방식 경우]

 

클래스가 Thread 클래스를 extends (상속) 시, 다른 클래스를 상속 불가.

 


[Runnable 인터페이스 구현 방식 경우]


Runnable 인터페이스를 implements (구현) 시, 다른 클래스를 상속 가능.

(예제) 

A_Class extends B_Class implements Runnable.

 

 

동시성 문제

[동시성 문제]

 

메인 실행 코드와 thread 코드는 동시에 실행되므로,

두 코드가 동일 변수 사용 시 정확한 결과값 예측 불가능.

(예제)

 

public class Hz extends Thread {

  public static int x = 0;


  public static void main(String[] args) {

    Hz thread = new Hz();

    thread.start();

    System.out.println(x);

    x++;

    System.out.println(x);

  }


  public void run() {

    x++;

  }

}

 

결과값:

0

1

또는

0

2


[동시성 문제 해결책]

 

스레드간 되도록 적은 속성 공유해야 하며,

thread의 isAlive() 메서드 사용해서 스레드가 변경 가능한 속성을 사용하기 전에 스레드 실행 완료 여부를 체크.

(예제)

 

public class Hz extends Thread {

  public static int x = 0;


  public static void main(String[] args) {

    Hz thread = new Hz();

    thread.start();

    while(thread.isAlive()) {

      System.out.println("thread 종료 대기");

    }

    System.out.println("Hz: " + x);

    x++;

    System.out.println("Hz: " + x);

  }

  public void run() {

    x++;

  }

}

 

결과값:

thread 종료 대기

Hz: 1

Hz: 2



분류 제목
String Java - equals() 메서드 -두 문자열의 동일 여부 비교.
String Java - equalsIgnoreCase() 메서드 - 대소문자 구별 없이 문자열 동일 여부 비교.
String Java - format() 메서드 ★★★ - 문자열 포맷 (= format메서드 = 포맷 메서드)
String Java - getBytes() 메서드 - 문자열의 바이트(byte) 배열 반환 (= getBytes메서드 …
String Java - getChars() 메서드 - 문자열에서 문자 배열로 단일문자를 복사.
String Java - hashCode() 메서드 - 문자열의 해시코드 반환 (= hashCode메서드 = 해시코드메서…
String Java - indexOf() 메서드 - 문자열에서 지정 문자의 처음 발견 위치의 색인번호 반환
String Java - intern() 메서드 △ - 지정 색인부터 검색 시작해, 지정 문자가 처음 나타나는 색인 반…
String Java - isEmpty() 메서드 - 빈 문자열인지 여부 체크 (= isEmpty메서드 = 이즈엠프티메서…
String Java - lastIndexOf() 메서드 - 지정 문자가 문자열에서 마지막 나타난 위치의 색인번호 반환.
String Java - length() 메서드 - 문자열 길이 (= length메서드 = 렝스메서드)
String Java - matches() 메서드 △ - 정규식과 일치하는 문자열 검색 후 일치 항목 반환.
String Java - offsetByCodePoints() 메서드 △ - 지정 인덱스에서 codePointOffset…
String Java - regionMatches() 메서드 △ - 두 문자열 영역이 같은지 테스트.
String Java - replace() 메서드 - 문자열의 특정 문자를 지정 문자로 대체. (= replace메서드 …
String Java - replaceFirst() 메서드 △ - 지정 정규식과 일치하는 첫 번째 하위 문자열을 새 지정…
String Java - replaceAll() 메서드 △ - 지정 정규식과 일치하는 모든 하위 문자열을 새 지정대로 대…
String Java - split() 메서드 △ - 문자열을 부분 문자열의 배열로 분할.
String Java - startsWith() 메서드 - 문자열이 지정 단일문자(들)로 시작하는지 체크.
String Java - subSequence() 메서드 △ - 하위 시퀀스 반환
7/10
목록
찾아주셔서 감사합니다. Since 2012