스레드(thread)란, 프로세스(process) 내에서 실제로 작업을 수행하는 주체를 의미한다.
- 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행한다.
- 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스(multi-threaded process)라고 한다.
프로세스(process)란 단순히 실행 중인 프로그램(program)이라고 할 수 있다. 프로세스는 프로그램에 사용되는 데이터와 메모리 등의 자원 그리고 스레드로 구성된다.
사용 예시public class Sample extends Thread { public void run() { // Thread 를 상속하면 run 메서드를 구현해야 한다. System.out.println("thread run."); } public static void main(String[] args) { Sample sample = new Sample(); sample.start(); // start()로 쓰레드를 실행한다. } }
- 스레드는
stack
을 가짐으로써 스레드는 독립적인 실행 흐름을 가질 수 있게 된다.스레드 생성하기
- 스레드를 생성하는 방법은 2가지다.
- Thread 클래스 상속받아서 생성
- Runnable 인터페이스 구현하여 생성
- 방법이 2가지인 이유는 자바가 단일상속만 허용하기 때문이다. 만약 상속받아야 하는 클래스가 있다면 Thread 클래스를 상속받는 방법 대신 Runnable 인터페이스를 구현하는 방법을 사용할 수 있다.
- 단방향 통신을 지원하는 기능
- 서로 통신을 위한 Input Stream / Ouput Stream 2개의 Stream이 필요
- 일반적으로 2개의 Stream을 I/O Stream이라고 통칭
- 출발지에서 도착지로 데이터를 운반하는 연결 통로
[ 입력, 출력 (Input, Output) ]
- 어떤 대상으로 부터 데이터를 메모리로 읽어 들이는 것을 입력이라고 한다.
- 프로그래밍 언어의 관점에서 메모리라는 것은 변수 or 필드 or 객체로 생각하면 편하다
- 데이터는 2진수로 이루어져 있지만 2진수 8개의 묶음인 1byte 단위로 생각하면 편하다
- 1byte 는 총 256 가지의 값을 표현할 수 있다.
- 1 byte 를 10진수로 환산하면 0~255 사이의 숫자 중에 하나이다.
- 입력과 출력을 통해서 이동하는 데이터는 byte(byte알갱이) 하나 하나가 이동한다고 생각하면 된다.
바이트 입출력 스트림
문자열 입출력 스트림
JDBC ( Java DataBase Connectivity )
- 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다. JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다.
- DataBase 에 연결해서
SELECT
,INSERT
,UPDATE
,DELETE
작업하기- Oracle 에 연결하기 위해서는 드라이버 클래스가 들어있는
ojdbc6.jar
파일을 사용할 수 있도록 설정해야 한다.Eclipse 에서 설정 방법 프로젝트에 마우스 우클릭 => Build Path => Configure Build Path => Librarys 탭 선택 => classpath 선택 => 우측 Add External jar 버튼을 누른 후 => ojdbc6.jar 파일을 찾은 다음 => Apply
사용 예시
public class MainClass01 { public static void main(String[] args) { //DB 연결객체를 담을 지역 변수 만들기 Connection conn=null; try { //오라클 드라이버 로딩 Class.forName("oracle.jdbc.driver.OracleDriver"); //접속할 DB 의 정보 @아이피주소:port번호:db이름 String url="jdbc:oracle:thin:@localhost:1521:xe"; //계정 비밀번호를 이용해서 Connection 객체의 참조값 얻어오기 conn= DriverManager.getConnection(url, "scott", "tiger"); //예외가 발생하지 않고 여기까지 실행순서가 내려오면 접속 성공이다. System.out.println("Oracle DB 접속 성공"); } catch (Exception e) { e.printStackTrace(); } //SELECT 작업을 위해서 필요한 객체의 참조값을 담을 지역 변수 미리 만들기 PreparedStatement pstmt=null; ResultSet rs=null; try { //실행할 sql 문 String sql="SELECT num, name, addr" + " FROM member " + " ORDER BY num DESC"; //PreparedStatement 객체의 참조값 얻어오기 pstmt=conn.prepareStatement(sql); //PreparedStatement 객체를 이용해서 query 문 수행하고 결과를 //ResultSet 객체로 받아오기 //SELECT 문 실행하고 결과 값을 ResultSet 으로 얻어내기 rs=pstmt.executeQuery(); /* * ResultSet 객체의 .next() 메소드는 cursor 밑에 row 가 존재하는지 확인해서 * 만일 존재하면 true 를 리턴하고 cursor 가 한칸 밑으로 이동한다. * 만일 존재하지 않으면 false 를 리턴한다. */ while(rs.next()) { //현재 cursor 가 위치한 곳에서 num 이라는 칼럼의 정수 얻어내기 int num=rs.getInt("num"); //현재 cursor 가 위치한 곳에서 name 이라는 칼럼의 문자열 얻어내기 String name=rs.getString("name"); //현재 cursor 가 위치한 곳에서 addr 이라는 칼럼의 문자열 얻어내기 String addr=rs.getString("addr"); //콘솔창에 출력해보기 System.out.println(num+" | "+name+" | "+addr); } }catch(Exception e) { e.printStackTrace(); } } }