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