서버 소켓생성
ServerSocket server = new ServerSocket(3000);
접속자 소켓을 받는다.
Socket client = server.accept();
데이터를 보내고, 읽기위한 스트림을 소켓에서 얻기
DataInputStream dis = new DataInputStream( client.getInputStream() );
DataOutputStream dos = new DataOutputStream( client.getOutputStream() );
스트림에 데이터 쓰기
dos.writeUTF("메시지");
스트림의 내용을 목적지로 분출
dos.flush();
소켓에 들어온 데이터 읽어서 대화 내용창에 출력
while(true){
jta.append(dis.readUTF());
}
서버 소켓생성
ServerSocket client = new ServerSocket("서버ip", 3000);
데이터를 보내고, 읽기위한 스트림 소켓에서 얻기
DataInputStream dis = new DataInputStream( client.getInputStream() );
DataOutputStream dos = new DataOutputStream( client.getOutputStream() );
소켓에 들어온 데이터 읽기
while(true){
jta.append(dis.readUTF());
}
스트림에 데이터 쓰기
dos.writeUTF("메시지");
동시에 일(method)처리를 해야 할 때.(동시에 여러 method를 호출할 때.)
프로그램의 종료 시간을 측정할 수 없다.
작은 Process.
=> 실행중인 프로그램(사용자, OS에서 실행)
CPU가 한번에 처리하는 일의 단위.(한번에 하나의 프로세스만 처리)
CPU Scheduling은 두가지 존재
시분할 CPU Scheduling (time sharing) :
OS에서 사용.
작업관리자의 역할이 매우 중요.
작업관리자가 현재 실행중인 Process를 분석하여 CPU를 점유하는 시간을 설정.
선점형 CPU Scheduling (running time) :
java에서 사용.
작업관리자가 필요없다. 간단하게 Thread실행할 수 있다.
Thread는 실행할 때마다 결과가 다르게 나온다.
상속 : extends Thread
구현 : implements Runnable
Thread의 생명주기

Interrupt : CPU 점유하고 있는 Thread를 강제로 분리하는 것.
1. Thread를 상속
public class Test extends Thread(){
2. run method를 override
public void run(){
3. Thread로 동작해야하는 코드 정의(동시에 처리되어야할 코드)
}
4. 상속관계의 자식 클래스를 객체화
Test t = new Test();
5. Thread클래스의 start()호출
t.start();
}
1. Thread를 상속
public class Test extends Runnable(){
2. run method를 override
public void run(){
3. Thread로 동작해야하는 코드 정의(동시에 처리되어야할 코드)
}
4. 상속관계의 자식 클래스를 객체화
Test t = new Test();
5. Thread클래스를 has a관계로 생성
Thread th = new Thread(t);
6. Thread클래스의 start()호출
th.start();
}