Math 클래스 반올림이나, 내림등 Floor(내림), Ceil(올림), Round(반올림,반내림)을 제공한다.


- Math.round 사용하면 소수점의 첫째 자리의 값이 5 이상이면, 반올림하고 5보다 작으면 반내림을 한다.

  Trace( Math.round(25.5525)) -> 출력 : 26


- 원하는 소수점 자리에서 반올림하고 싶을 때

  소수점 두자리에서 끊어서 반올림하고 싶을 때는 소수점 이하 두자리 ".01"의 값으로 연산한다. 1은 곱하거나 나누어도     원래의 값을 반환한다는 것을 기억하자.


   * 추억의 산수

      300 / 1 = 300

      300 * 1 = 300

      300 / 0.1 = 3000 (소수가 없도록 제수(분자)와 피제수(분모)에 10의 거듭제곱을 곱한다.)

      300 * 0.1 = 30 (소수점 이하가 1자리 있으므로, 300끝에 1자리 소수점이 붙는다. 30.0)


      위에서 보면 소수점 이하 n자리를 나누면 제수는 n개 만큼 뒤에 수가 붙고, 소수점이하 n자리를 곱하면 제수의

      단위는 n개 만큼 축소한다.


Trace( Math.round(25.5525) ) -> 출력 26

위의 결과를 소수점 두자리에서 끊어서 연산하고 싶다면 아래와 같이 코딩한다.


Trace( Math.round(25.5525 / .01) * .01 ) -> 출력 25.55

(25.5525 / .01 ) 에서 10의 거듭제곱을 한 값이 2555.25를 얻게되고 .25는 5보다 작으므로 반내림한다.

반내림한 값에 .01을 곱하여 다시 2자리의 소수점의 값을 얻어낸다.


- 근접한 수가 5가 아닌 다른 수로 정하고 싶을때

Math.round()는 5를 기준으로 반내림이나, 반올림을 한다. 하지만 5가 아닌 수로 반내림이나, 올림을 하고 싶을 때는 위와 같은 방법으로 정수를 사용한다.


Trace( Math.round( 25/6 ) * 6 ) -> 출력 : 24

- 25의 1자리수가 6을 넘지못하면 값을 24를 출력한다. 25를 6으로 분해하면 4.16의 값이 나온다. 6에 관하여, 쪼개진 값을 반올림하면 4이고 다시 6을 곱하면, 분해전의 값으로 복원된다.


Trace( Math.round( 25/10 ) * 10  ) -> 출력 : 30

- 방식은 위와 같고 자리수가 두자리인 10이다. 따라서, 반올림과 내림의 기준을 10씩 끊어서 확인할 수 있다.


Trace( Math.round( 30/10) * 10 ) -> 출력 : 30

Trace( Math.round( 25/100 ) * 100 ) -> 출력 : 0

- 같은 방식이고, 얻어진 값이 소수점이하 0.25 이를 다시 반올림하면, 0이고 100을 곱하여도 0이다.

즉, 100씩 끊어서 반올림이나, 반내림을 하는 것이다.


 

    // 숫자인지 체크
    public boolean isNumeric(String str) {

        Pattern pattern = Pattern.compile("[+-]?\\d+");
        return pattern.matcher(str).matches();
    }

 

오랜만에 모사이트에 가서 글을 보다가...

 

String과 StringBuffer에 대한 논쟁이 한참 불붙은 것을 보았습니다.

 

글쓴 사람들 보니까 좀 안다는 사람들 모여서 열띤 토론을 벌이더군요.

 

 

간단히 생각하면 될 문제를 복잡하게 생각하니 배가 산으로 갑니다.

 

 

String이나 StringBuffer나 뭘쓰면 어떻습니까... 성능문제는 성능에 문제가 될때만 발생하는 겁니다.

 

물론 성능이 좋을 수록 좋겠지만... 필요이상으로 성능에 집착하는 것은 낭비입니다.

 

 

제 의견을 말씀드리겠습니다.

 

String이나 StringBuffer나 모두 문자 배열입니다.(char[])

 

 

배열의 특징을 잘아시겠지만, 한번 생성하면 크기를 늘일 수 없어서 크기를 늘이려면 새로운 배열을 만들어야 합니다.

 

String은 변경할 수 없으니 문자열 결합이 일어날때마다 항상 새로운 배열을 만들고 복사하는 과정을 거칩니다.

 

이과정은 여유있는 크기의 배열(StringBuffer)의 내용을 변경하는 것과는 큰 성능 차이가 있습니다.

 

 

하지만, 너무 여유있는 크기의 배열을 생성하면, 메모리의 낭비가 있겠죠.(StringBuffer의 단점)

 

또한 아무리 StringBuffer라고 해도 크기를 작게 잡아놓으면 String쓰는거나 별다른게 없을 수도 있습니다.

(새로운 크기의 배열을 생성하고 복사해야하므로... 그래도 String보다는 StringBuffer가 낫습니다.)

 

 

그래도... 대부부의 경우, StringBuffer를 사용하는 것이 String을 쓰는 것보다 훨씬 빠릅니다.(문자열 편집에 관한한)

 

일부 경우에서는 String이 StringBuffer보다 빠를 수는 있지만, 대부분의 경우 당연하게도 StringBuffer가 빠를 수

 

밖에 없습니다. 배열의 특징이 그렇기 때문이죠.

 

 

한가지 알아야할 것은 String에 대한 +연산을 컴파일러가 StringBuffer로 자동변환해준다는 것입니다.

 

그러니 항상 StringBuffer대신 String을 써도 별 문제 없다고 하는 사람이 있지만... 컴파일러의 자동변환에도 한계가 있습니다.

 

String에 +연산을 사용하는 모든 경우를 커버할 수는 없다는 얘기죠.

 

 

그래서... 웬만하면 문자열 결합에 String을 그냥 사용해도 된다.(컴파일러가 자동변환해서 최적화 해주니까.)

 

성능상의 문제가 되는 경우에만 StringBuffer를 이용해서 최적화한다.

 

모든 곳에 String대신 StringBuffer를 사용하면 가독성이 떨어지니까...(코드를 읽기 힘들어지니까.)

 

출처 : 남궁성 자바카페

 

 

 정규식 패턴

설 명 

결 과 

 c[a-z]* 

 c 로 시작하는 영단어

 c, ca, co, car

 c[a-z]

 c 로 시작하는 두 자리 영단어(대소문구분)

 ca, co

 c[a-zA-Z]

 c 로 시작하는 두 자리 영단어(대소문구분않함)

 cA, ca, co

 c[a-zA-Z0-9]c\w

 c 로 시작하고 숫자와 영어로 조합된 두 글자

 cA, ca, co, c0

 .*

 모든 문자열

 전부다

 c.

 c 로 시작하는 두 자리

 cA, ca, co, c., c0, c#

 c.*

 c 로 시작하는 모든 문자열(기호포함)

 cA, ca, co, combat, c#

 c\.

 c. 와 일치하는 문자열 '.'은 패턴작성에 사용되는 문자이므로

 escape 문자인 '\'를 사용해야 한다.

 c.

 c\d

 c[0-9]

 c 와 숫자로 구성된 두 자리 문자열

 c0

 c.*t

 c 로 시작하고 t 로 끝나는 모든 문자열

 combat, count

 [b|c].*

 [bc].*

 [b-c].*

 b 또는 c 로 시작하는 문자열

 bat, baby, count, car

 [^b|c].*

 [^bc].*

 [^b-c].* 

 b 또는 c 로 시작하지 않는 문자열

 date, disc

 .*a.*

 a 를 포함하는 모든 문자열.

 * : 0 또는 그 이상의 문자

 bat, baby, ca, car, date

 .*a.+

 a 를 포함하는 모든 문자열.

 + : 1 또는 그 이상의 문자. '+' 는 '*' 와 달리 반드시 하나 이상의

 문자가 있어야 하므로 a 로 끝나는 단어는 포함되지 않는다.

 bat, baby, car, combat

 [b|c].{2}

 b 또는 c로 시작하는 세 자리 문자열.

 (b 또는 c 다음에 두 자리이므로 모두 세 자리)

 bat, car

 

예제)

1. 정규식을 매개변수로 pattern 클래스의 compile(String regex)을 호출하여 pattern 인스턴스를 생성

EX) Pattern pattern = Pattern.compile("c[a-z]*");

 

2. 정규식으로 비교할 대상을 매개변수로 Pattern 클래스의 Matcher matcher(CharSequenceinput)를 호출해서 

    Matcher 인스턴스를 얻는다.

EX) Matcher matcher = pattern.matcher("비교할 매개변수");

 

3. Matcher 인스턴스에 boolean matches()를 호출해서 정규식으로 부합하는지 확인한다. (return boolean)

if( matcher.matches() )




-    일반적으로 문자열들을 비교하기 위해서 equels 메서드를 사용합니다.

equals() 메서드로 문자열의 내용을 비교하는 것보다는 등가비교연산자(==) 를 이용해서 주소(4 byte)를 비교하는 것이 더 빠르다.

그래서 비교해야 할 문자열의 개수가 많은 경우에는 보다 빠른 문자열검색을 위해서 intern 메서드와

등가비교연산자(==)를 사용하기도 한다.

운영체제 별 OS Name / OS.version 얻기


String Os_name = System.getProperty("os.name");

String Os_version = System.getProperty("os.version");


Os_name "Windown" 일때, Os_version 으로 Windown 버전을 분별 할 수 있다.


출처 : http://msdn.microsoft.com/en-us/library/windows/desktop/ms724832(v=vs.85).aspx


근데 문제점 발생

- 로컬에서 Tomcat 으로 띄우고 하면 내 윈도우 및 버전이 정상적으로 alert() 로 띄우면 값이 보이는데,

  테스트 이후에 실제 서버(CentOS) 에 올려서 해보면 무조건 sunOS 라고 뜬다..

  모.. CentOS 로 띄웠으니.. 그러게 보이는거야 당연하지만.. 좀 놀랬다. 로컬에서는 잘 되었으니까...

  그래서 Googling 해보니...

  navigator.userAgent 를 써서 시스템 정보를 구해야 한다고 한다.

  navigator.userAgent 를 써도 브라우저 상세 버전은 Version number 로 분기처리를 해야되니 

  microsoft 에서 퍼온 Operation System Version 은 꼭 알아야 할 정보일듯... 

 

 navigator.userAget 이용한 사용자 Os 정보 확인은 JAVASCRIPT 카테고리에서 확인

 - 'Int' 는 자료형(원시자료형 : int | char | float | double )이고

 - 'Integer' 는 클래스

Wrapper 클래스(감싸는 클래스 : 기존의 클래스를 더욱 확장시키기 위해 쓰이며 주로 형변환에 사용된다)

즉. 원시자료형을 클래스로 만든 것.


- 원시자료형과 클래스(Wrapper클래스) 차이점

'Integer' 를 사용하면 Null 값 처리가 용이하지만 직접적인 산술연산을 할수 없다는 장점.

그래서 주로 형변환에 쓰이나 보다.


형변환 예)

Integer.valueOf(String) 와 Integer.parseInt(String) 의 차이 때문

Integer.valueOf(String) 를 사용하면 Integer 클래스로 리턴이 되기 때문에 산술 연산을 할 수가 없다.

그리고 위에 말한 바와 같이 Integer.parseInt(String) 는 int형을 리턴하니 null 값이 들어가선 안된다.

Integer.valueOf(String)하고 intValue()로 바꿔 연산하던지

Integer.parseInt(String)하기 전 null 값을 체크하던지 선택을 해야한다.


Wrapper 클래스 공부를 다시해야겟다. 챙피하군 


- Wrapper 클래스(기본자료형 -> 객체형)

기본형 변수도 때로는 객체로 다루어져야하는 경우가 있다.

예를 들면, 매개변수로 객체를 요구할 때, 기본형 아닌 객체로 저장해야 할 때, 객체간의 비교가 필요할 때 등의 경우에는 기본형 값들을 객체로 변환하여 작업을 수행하여야 하는데 그 때에 Wrapper 클래스를 이용한다.

Wrapper 클래스는 모두 equals() 가 오버라이딩되어 있어서 주고값이 아닌 객체가 가지고 있는 값을 비교한다.

 

'공부 > JAVA' 카테고리의 다른 글

JAVA_[문자열 비교 .equals() 메서드와 등가비교연산자(==) 차이점]  (0) 2014.01.20
JAVA_[ OS 정보 확인 ]  (0) 2013.09.30
JAVA_[날짜 형식 변경(SimpleDateFormat)]  (0) 2012.11.12
JAVA_[Vector]  (0) 2012.07.31
JAVA_[Thread]  (0) 2012.06.23

- 날짜포멧 API

Letter Date or Time Component Presentation Examples
G Era designator Text AD
y Year Year 1996; 96
M Month in year Month July; Jul; 07
w Week in year Number 27
W Week in month Number 2
D Day in year Number 189
d Day in month Number 10
F Day of week in month Number 2
E Day in week Text Tuesday; Tue
a Am/pm marker Text PM
H Hour in day (0-23) Number 0
k Hour in day (1-24) Number 24
K Hour in am/pm (0-11) Number 0
h Hour in am/pm (1-12) Number 12
m Minute in hour Number 30
s Second in minute Number 55
S Millisecond Number 978
z Time zone General time zone Pacific Standard Time; PST; GMT-08:00
Z Time zone RFC 822 time zone -0800

그리고 아래의 간단한 예제는 API문서에서..
Date and Time Pattern Result
"yyyy.MM.dd G 'at' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT
"EEE, MMM d, ''yy" Wed, Jul 4, '01
"h:mm a" 12:08 PM
"hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
"K:mm a, z" 0:08 PM, PDT
"yyyyy.MMMMM.dd GGG hh:mm aaa" 02001.July.04 AD 12:08 PM
"EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700
"yyMMddHHmmssZ" 010704120856-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ" 2001-07-04T12:08:56.235-0700


이정도면 어느정도 이해는 하고 사용은 할수 있겠다.


- 사용예제

        Date now = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");

  String firstDt = format.format(now);


'공부 > JAVA' 카테고리의 다른 글

JAVA_[ OS 정보 확인 ]  (0) 2013.09.30
JAVA_[ Int & Integer 차이 ]  (0) 2013.03.22
JAVA_[Vector]  (0) 2012.07.31
JAVA_[Thread]  (0) 2012.06.23
JAVA_[객체_직렬화]  (0) 2012.06.23
●벡터(Vector)

   1. 대용량의 데이터를 효과적으로 다룰 수 있는 클래스

   2. 용량의 변경이 용의

   3. 벡터에 저장하는 모든 데이터는 Object타입

   4. 어떤 종류의 객체도 함께 담을 수 있다.

   +++ 배열의 크기를 한번 정해지면 변경 불가하고 같은 종류의 데이터만

        사용할 수 있다는 단점 보안

 

벡터 생성자

   1. Vector :  초기용량이 10, 용량 초과시 크기를 두배 씩 증가

   2. Vector(int aaa) : 지정한 크기의 용량으로 초기화된 Vector 객체를 생성한다.

   3. Vector(int aaa, int bbb) : 지정한 크기의 용량으로 초기화된 벡터객체를 생성하고

                                          용량 초과시 bbb만큼 증가 시킨다.

※ 일반적으로 용량의 문제가 거의 발생하지 않기 때문에 보통 인자가 없는

    생성자를 사용하여 벡터 객체를 생성한다.      Vector v = new Vector();

 

●벡터에 객체 저장

  메소드

   1. void add(int index, Object object) - 지정한 인덱스의 위치에 객체를 추가함

   2. void addElement(Object objec) - 벡터의 끝에 객체를 추가한다

        Vector v = new Vector();

        v.add(1, "객체명");             //지정한 위치에 객체 추가

        v.addElement("객체명");     //마지막에 객체 추가

        v.addElement("객체명");     //마지막에 객체 추가

 

●벡터로 부터 객체 삭제

  메소드

1.       Object remove(int index) ? 지정한 위치의 객제를 벡터에서 제거

2.       boolean remove(Object object) ? 지정한 객체를 벡터에서 제거

3.       void clear() ? 벡터의 모든 요소를 제거

예) Vector v = Vector();            //벡터 생성

   v.remove(int index);                        //지정한 위치의 객체 제거

   v.remove(“객체명”);            //지정한 객체 제거

   v.clear();                        //벡터의 모든 요소를 제거

 

●벡터로 부터 객체 검색

  메소드

1.       Object elementAt(int index) ? 지정한 위치의 객체를 리턴

2.       Object get(int index) ? 지정한 위치의 객체를 리턴

※ 벡터에 요소를 추가할 때는 String형을 그대로 사용할 수 있지만 검색한 결과는 Object형이므로 사용하기 위해서는 원래 데이터형으로 캐스팅해야 한다.

예) Vector v = Vector();                        //벡터 생성

   String s = (String)v.elementAt(0);            //지정한 위치의 객체를 리턴

   String s2 = (String)v.get(1);                   //지정한 위치의 객체를 리턴

   Enumeration e = v.elements();            //Vector의 요소의 리스트를 리턴

    Iterator과 비슷한 역할(저장 객체 추출)

 

 

●벡터의 기타 메소드

1.      int capcity() ? 벡터의 현재 용량의 리턴

2.      boolean contains(Object object) ? 주어진 요소가 벡터에 있는지 알아낸다.

3.      int indexof(Object object) ? 주어진 요소의 위치를 리턴(없으면 -1)

4.      int size() ? 벡터에 포함되어 있는 요소의 수를 리턴

5.      void trimToSize() ? 벡터의 용량을 현재 벡터의 크기에 맞게 수정

 

●Enumeration

벡터에 저장된 객체를 열거형으로 리턴

  Enumeration e = v.elements();               //Vector의 요소의 리스트를 리턴

     While(e.hasMoreElements()) {

    System.out.println(e.nextElement());

}

 

●Iterator

Collection에 저장된 객체를 나열 또는 열거하기 위한 인터페이스

  Iterator ie = v.iterator();         //Vector의 요소의 리스트를 리턴

  While(ie.hasNext()){

    System.out.println(ie.next());

}

 

● Stack

1.      Object를 저장하는 하나의 방법

2.       가장 나중에 들어간 데이터가 가장 먼저 밖으로 나오는 형태

LIFO(Last In First Out)

예) import java.util.*;

public class StackTest{

public static void main(String[] args){

      Stack s = new Stack();

      System.out.println(s.empty());           //스택이 비어있는지 확인 true

      s.push(“데이타1”);           //데이터 넣기

      s.push(“데이타2”);

      System.out.println(s.empty());           //false

      System.out.println(s.peek());   //가장 먼저 나올 데이타(데이타1)

      System.out.println(s.pop());           //스택에 저장 되어 있는 차례로 출력

      System.out.println(s.pop());

      System.out.println(s.empty());            //스택이 비어있는지 확인 true

}

}

 

●LinkedList

1.      List 인터페이스의 링크 리스트의 구현

2.      void add(int index, Object element) ? 지정된 위치에 지정된 요소 삽입

void addLast(Object element) ? 리스트의 마지막에 지정된 요소 추가

Object get(int index) ? 지정된 위치에 있는 요소 리턴

Object getLast() ? 리스트내의 마지막 요소 리턴

Object remove(int index, Object element) ? 지정된 위치에 있는 요소 삭제

3.      데이터의 첨가, 삭제가 편리하고 속도가 빠르다.

 

● Map & hashing

키와 값의 쌍으로 이루어진 요소를 저장하는 자료구조

해싱이란 키객체를 처리하여 hash code(정수값)를 만들어 내는 방법이다.

 

●HashMap

Null허용, Map interface를 implements한 클래스

 

●Hashtable

Null 허용하지 않음, Map interface를 implements한 클래스

 

'공부 > JAVA' 카테고리의 다른 글

JAVA_[ Int & Integer 차이 ]  (0) 2013.03.22
JAVA_[날짜 형식 변경(SimpleDateFormat)]  (0) 2012.11.12
JAVA_[Thread]  (0) 2012.06.23
JAVA_[객체_직렬화]  (0) 2012.06.23
JAVA_[Adapter_패턴 (일명 : Wrapper 패턴)]  (0) 2012.06.23

#### Thread ####

  - 생각보다 Thread 범위가 광범위하다. 너무 많다. 일단 오늘 배운 것( Runnable & extends ) 두 가지를 포스팅!

 

### Extends Thread ###

    * Thread 를 extends 한 클래스를 작성한다.
    * run() 메소드를 오버라이딩하여 내용부를 삭정한다.
    * main() 메소드를 내부에서 Thread 를 extends 한 클래스의 객체를 생성한다.
    * 해당 객체의 start() 메서드를 호출
    EX)
    class Daniel1 extends Thread {
       public void run() {
           System.out.println("Thread Start");
           for ( int i = 0; i < 10; i++ ) {
               System.out.println(i);
           }
       }
    }

    public class Daniel1Main {
        public static void main(String args[] ) {
            Daniel1 danile1 = new Daniel1();
            adniel1.start();
            System.out.println("Thread End")
        }
    }

 

### Runnable Thread ###
    * Runnable 을 구현하는 클래스 작성
    * run() 메서드를 오버라이딩하여 내용을 구현
    * main() 메서드에서 Runnable 를 구현한 클래스의 객체를 생성
    * Thread 객체를 생성하여 매개변수를 implements Runnable 한 객체를 대입
    * Thread 객체의 start() 메서드 호출
    EX)
    class Ssung1 implements Runnable {
        public void run() {
            System.out.println("Thread Start");
            for ( int i = 0; i < 10; i++ ){
                System.out.println(i);
            }
        }
    }

    public class Ssung1Main {
        public void run() {
            Ssung1 ssung1 = new Ssung1();
            Thread ssung1Thd = new Thread(ssung1);
            ssung1Thd.start();
        }
    }

 

    - 허접하다. 쩝



 - 2015.02.06 Thread 추가


▶ Thread 우선순위

- 동시에 여러 Thread 를 실행할 때 우선순위를 주어 실행시간을 늘려줄수 있다.

  우선순위라고 해서 숫자가 낮은게 먼저라고 생각하겟지만, 그 반대이다.

  쉽게, 실행시간을 늘려주기 위한 숫자라고 생각하면 될 듯 하다.

  우선순위는 1 ~ 10 까지 정수이며, Default 값은 '5' 이다.

  ThreadGroup 으로 상위 그룹의 우선순위를 설정한 후에 하위에 쓰레드를 추가하면 상위 ThreadGroup 에 설정한 우선순위를

  따라간다.

  그리고, Thread start() 하기전에 우선순위를 주어야 하며, start() 한 후에 우선순위를 주면 에러가 난다.

  방법은, Thread.setPriority(int 우선순위 값) 안에 1 ~ 10 까지의 값을 넣어주면 된다.


▶ Daemon Thread (데몬 쓰레드)

- 데몬 쓰레드는 일반쓰레드의 작업을 돕는 보조적인 쓰레드

  일반 쓰레드가 종료되면 자동으로 데몬 쓰레드는 종료가 된다.

  무한루프나, 조건문을 이용해서 데몬 쓰레드 실행 후 대기하고 있다가 조건이 맞으면, 작업을 수행하고 다시 대기하는 쓰레드

  데몬 쓰레드 작성 & 실행 방법은 일반 쓰레드와 거의 동일하다.

  쓰레드 start() 전에 setDaemon(boolean on) 값에 'true' 지정하면 데몬 쓰레드가 된다.

  주의할 점은 우선순위 설정과 같이 start() 하기전에 setDaemon(boolean on) 값을 입력하어야 한다.


- ex


public class Thread_Ex11 implements Runnable {


    // 자동저장

    static boolean autoSave = false;


    public static void main(String[] args) {


        Thread thread = new Thread(new Thread_Ex11());

        thread.setDaemon(true);

        thread.start();


        for (int i = 1; i < 20; i++) {

            try {

                thread.sleep(1000);

            } catch (Exception e) { }

            System.out.println(i);


            if( i == 5 ) {

                autoSave = true;

            }

        }

        System.out.println("프로그램을 종료합니다.");

    }


    @Override

    public void run() {

        while (true) {

            try {

                Thread.sleep(3 * 1000);     // 3초

            } catch (Exception e) { }


            // true 이면

            if (autoSave) {

                autoSave();

            }

        }

    }


    public void autoSave() {

        System.out.println("작업파일이 자동저장 되었습니다.");

    }

}


- main() 메서드 for 문이 종료되면 데몬 쓰레드는 자동으로 종료가 된다.
  하지만, 데몬쓰레드 설정 setDaemon(boolean on) 값에 'true' 설정을 하지 않고 그냥 보통 쓰레드로 위 구문을 실행하면,
  종료되지 않고.. 계속 "작업파일이 자동저장 되었습니다" 를 출력하게 될 것이다.(무한반복 '- ';;)


▶ 쓰레드 상태(JDK 1.5 부터 추가 됨)
- Thread.getState() 메서드 호출해서 확인 할 수 있다.

 STATUS

 COMMENT 

 NEW

 쓰레드가 생성되고 아직 START() 가 호출되지 않은 상태 

 RUNNABLE

 실행 중 또는 실행 가능한 상태 

 BLOCKED

 동기화블럭에 의해서 일시정지된 상태(LOCK 이 풀릴 때 까지 기다리는 상태)

 WAITING

 TIMED_WAITING

 쓰레드의 작업이 종료되지는 않았지만 실행가능하지 않은 일지정지 상태.

 TIMED_WAITING 은 일시정지시간이 지정된 경우를 의미 

 TERMINATED

 쓰레드의 작업이 종료된 상태





... 나중에 보면 또 다 까져먹을거 같은데..


 

   

'공부 > JAVA' 카테고리의 다른 글

JAVA_[날짜 형식 변경(SimpleDateFormat)]  (0) 2012.11.12
JAVA_[Vector]  (0) 2012.07.31
JAVA_[객체_직렬화]  (0) 2012.06.23
JAVA_[Adapter_패턴 (일명 : Wrapper 패턴)]  (0) 2012.06.23
JAVA_[Eclipse_SerialVersionUID]  (0) 2012.06.23

+ Recent posts