Day17

2020. 10. 20. 11:49교육과정/KOSMO

키워드 : 쓰레드 복습 / stop() / 스레드 우선순위 / 동기화( lock과 synchronized ) / 스레드 일시정지 및 재가동 / FileOutputStream / FileInputStream / DataOutputStream / DataLinputStream / ObjectOutputStream / ObjectInputStream / Reader / Writer / 형 변환 및 저장 / 입력값을 파일로 만들기 / 직렬화 (Serializable) / JFileChooser / showSaveDialog / showOpenDialog / JScrollPane

 

****

 

1. 쓰레드 복습

class A {                             ------------ ①
 ---- main ----
    B b = new B ( ) ;              ------------ ④
    b.start ( )   // b.run ( ) ;      ------------ ⑤
    출력 ( "종료" ) ;
}


class B extends Thread {        ------------ ②
 // class B implements Runnable {       >>>>> 확장성을 위해 Runnable을 상속하는 경우가 많다. 

    void run ( ) {                   ------------ ③
     // public void run ( ) {

    }
}

※ -- Runnable -- Run -- Block 을 오가며 쓰레드가 처리된다. 

 

 

2. 스레드가 무한히 작동하는 예제

 - Thread.currentThread( ) : 현재 수행중인 작업의 이름 확인

 - stop( ) 대신 flag를 사용하여 while문을 빠져나오도록 작성할 수 있다. 

 - catch (ThreadDeath e)로 쓰레드가 종료되는 예외가 발생했을 때의 예외처리를 한다.

 

 

3. 스레드에 우선순위 부여하기

 - Thread.MAX_PRIORITY ... 기본값 10

 - Thread.NORM_PRIORITY ... 기본값 5

 - Thread.MIN_PRIORITY ... 기본값 1

 

 

4. 쓰레드 퀴즈

    1. 다음 메소드들 중에서 쓰레드의 실행은 멈추기 하는 것은?
           (1)sleep()                     (2) stop()                       (3) wait()
           (4)notify()                     (5)notifyAll()
   답 : (1), (2), (3)

 

    2. 쓰레드를 실행할 수 있는 클래스를 만들기 위해 사용되는 인터페이스는?
           (1)Run                         (2) Runnable                  (3) Thread
           (4)Threadable                (5) Exception
    답 : (2)


    3. 쓰레드를 실행할 수 있는 클래스를 선언하였을 때 정의해야 하는메소드는?
           (1)start()                      (2) wait()                                  (3) run()
           (4)init()                        (5) stop()
     답 : (3)


    4. 쓰레드에는 우선순위를 부여할 수 있는데, 이 경우 setPriority() 메소드를 안에 어떤 상수를 지정할수 있는가?
           (1)MAX_PRIORITY                      (1)PRIORITY_MAX
           (3)Thread. MAX_PRIORITY            (4)Thread. PRIORITY_MAX
     답 : (3)

 

    10. 다음 소스 중 main() 메소드안에 “여기” 부분에서 쓰레드를 생성하고 실행하는 코드로적당한 것은?

        class Test implements Runnable {
            public static void main( String [] args ) {
         /*  여기  */
            }
            public void run ( ) {       
            }
        }

           (1)Test  t = new Test ( );
              t.run( );
           (2)Test  t = new Test ( );
              new Thread().run( );
           (3)Test  t = new Test ( );
              new Thread(t).run( );
           (4)Test  t = new Test ( );
              new Thread(t).start( );
     답 : (4)


    11. 아래 프로그램에서 쓰레드를 생성하고 시작하기 위한 코드로 맞는것은?

            class MyThread implements Runnable {
                public void run( ) {
                   try{
                        for( int i=0; i <10 ; i++ ) {

                            System.out.println(“Thread is running”);

                            Thread.sleep( 1000 );

                       }
                  } catch ( InterruptedException ex ) { }
               }
            }

        (1)new Thread( MyThread ).start();
        (2)new Thread( new MyThread() ).run();
        (3)new MyThread().start();
        (4) new Thread( new MyThread() ).start();
     답 : (4)

-----------------------------------------------------------------

 

 

5. 동기화 (synchronized)

 : 두 개 이상의 스레드가 동시에 작동할 때, 같은 데이터를 중복으로 사용하면 원하는 값을 얻을 수 없다. 

  이러한 오류를 방지하기 위해, 현재 데이터를 사용하고 있는 해당 스레드를 제외하고

  나머지 스레드들은 데이터에 접근할 수 없도록 막기 위해 lock을 걸어주는 것이 synchronized이다. 

 

 

6. Bread 예제

 : 스레드에 동기화를 적용하고, flag를 통해 스레드가 일시정지했다가 다시 작동하게 만들 수 있다. 

 

 

7. 입출력 (IO)  -  FileOutputStream을 이용한 예제

 : 자바에서는 이미 입출력 체계가 표준화되어 있다. 

※ java와 file이 상호작용할 때
.... java에서 file로 데이터가 넘어가는 통로 (출력) : 스트림
.... file에서 java로 데이터가 넘어가는 통로 (입력)

※ 스트림(stream) : 입출력시 데이터 전송 가상 통로(?)
    (1) byte 형 스트림

            - InputStream (file -> java) (FIFO)
            - OutputStream (java -> file) (FIFO)

            >>> 필터스트림과 주로 같이 사용

                    ` DataLinputStream / DataOutputStream

                    ` ObjectInputStream / ObjectOutputStream
    (2) char 형 스트림
            - Reader
            - Writer

--------------------------------------------------------------------------

 

 

8. 입출력 (IO) -  FileOutputStream을 이용한 예제

- 배열을 통으로 전송하여 파일을 작성하므로 조금 더 빠르다. 

 - read()는 독특한 함수라서 저장할 데이터형을 read() 안에 넣어주어야 한다.

 

 

9. 입출력 (IO) - 형 변환 및 저장, 입력 버튼 클릭시 메모장 파일 생성 과정

 

 

 

10. 입출력 (IO) - 직렬화가 적용된 데이터를 스트림을 통해 입출력하기

 - import java.io.Serializable 직렬화를 통해 데이터를 한 번에 읽고 써서 보다 빠르다.

 - Object 타입으로 저장되기 때문에 읽고 쓸 때 readObject( ) , writeObject( ) 메소드를 사용한다. 

 - 불러온 데이터를 필요에 따라 적절한 타입으로 캐스팅 해주어 저장해야 한다. 

----------------------------------------------------------------------

 

 

11. 입출력 (IO) - 사용자 입력값이 파일로 저장되게 할 수 있다. 

 - import javax.swing.JFileChooser 로 파일선택기 사용

 - showSaveDialog( )

 - showOpenDialog( )

 - JFileChooser.APROVE_OPTION

 - . getSelectFile( )

 - FileWriter

 - char[] 배열을 생성하여 통로를 통해 파일로부터 데이터를 읽되, read() 함수 내에 데이터 타입을 함께 작성한다. 

 - String.valueOf( )  메소드를 사용하여 char 타입으로 읽어온 파일의 데이터를 String으로 변환

 - JScrollPane을 통해 TextArea에 스크롤 기능을 생성

 

 

 

12. 오라클 DataBase 설치

oracle DataBase 11g 버전 다운로드
sql developer = toad / orange / sqlgate

반응형

'교육과정 > KOSMO' 카테고리의 다른 글

Day19  (0) 2020.10.22
Day18  (0) 2020.10.21
Day16  (0) 2020.10.19
Day15  (0) 2020.10.16
Day14  (0) 2020.10.15