본문 바로가기

캐나다

자바 쓰레드(Thread) - Runnable을 이용해서 구현 2 (조금 변형) 이 전내용은 Runnable 인터페이스를 구현받아 쓰레드를 생성했지만 메인 메소드에서 다시 Thread tt1 = new Thread()해서 실행 시켰다. 하지만 이런 방법보다 조금 더 개선된 코드를 구현 할 수가 있다. 예제로 보자. 그리고 항상 자바 API를 보자. 우선 메인 메소드를 보면 이전에는 t1 = new ThreadTest("First Thread", 5); t2 = new ThreadTest("Second Thread", 5); 다음에 Thread tt1 = new Thread(t1); Thread tt2 = new Thread(t2); tt1.start(); tt2.start(); 를 생성했었다. 메인 메소드에 소스가 길어 지는건 바람직하지 않으니 지웠다. 그럼 어떻게 run메소드를 호.. 더보기
자바 쓰레드(Thread) - Runnable을 이용해서 구현 Runnable을 이용해서 구현하기 전에 sleep()메소드를 사용해서 차례차례 쓰레드가 결과값이 찍게 만들어 보자. run메소드에 sleep메소드를 추가하였다. sleep메소드 안의 숫자는 밀리세컨이다. 즉 1초가 들어오는 쓰레드들을 재운것이다. 이제 Runnable을 이용해보자. 내용은 크게 바뀌는것은 없다. 예제를 보자 Runnable을 implements 받았다. 주석에도 써놨지만 Runnable 인터페이스는 run메소드만 가지고있다. 따라서 sleep()은 없지만 다행이도 sleep() Thread클래스의 static메소드이다. 따라서 사용 할 수 있고 메인메소드의 start()도 없다. 결국 start()를 호출해주기 위해서는 Thread클래스로 객체를 선언해서 ThreadTest의 레퍼런스 .. 더보기
자바 쓰레드(Thread) - Thread클래스를 상속받아 구현 첫번째로 Thread를 상속받아 예제를 만들어 보자. 생성자중 스트링 변수를 받는 생성자가 있는데 이걸로 쓰레드 이름을 넣을 수 있고 getName() 으로 가져올수 있다. 일단 예제를 보자 ThreadTest라는 클래스를 만들고 main메소드를 만들어서 두개의 쓰레드를 생성하였다. 그럼 이 소스에는 몇개의 쓰레드가 있을까? 2개? 아니다 3개다. 메인메소드도 하나의 쓰레드이다. 따라서 이 클래스에는 3개가 있다. 쓰레드의 시작은 레퍼런스.start();를 시스템에게 명령하면 이는 곧바로 run을 실행한다. 위의 소스 결과는 차례대로 숫자가 나왔지만 다시 실행하면 다른 결과값이 나온다. 차례대로 나올꺼라고 단정하면 절대 안되다 더보기
자바 쓰레드(Thread) - 멀티 쓰레드(Multi-Thread) * 스레드 기반 멀티 태스킹에서는 스레드가 가장 작은 코드 단위이다. * 즉, 단일 프로그램이 두개 이상의 태스크(task)를 동시에 수행할 수 있다는 것을 의미(멀티쓰레딩) * 프로그램에서 발생하는 유휴시간(idle time)을 이용할 수 있는 효율적인 프로그램을 개발 가능 * 대부분의 I/O장치는 CPU보다 느리기 때문에, 이들을 사용하는 프로그램은 많은 시간을 이들로부터 정보를 주고 받는 과정에서 소비한다. * 멀티 쓰레딩을 이용하면 이러한 유휴시킨에 다른 태스크를 수행할 수 있다. * 멀티 쓰레딩이 지원되지 않던 시절에는 이터럽트 등의 편범을 이용해서 프로그래밍 * 자바에서는 언어 차원에서 스레드를 지원한다. * 모든 프로세스는 적어도 하나의 실행되는 스레드를 갖고 있어야 하며, 프로그램이 시작 .. 더보기
자바 네트워크(Network) - UDP 예제 2 (멀티캐스트-MulticastSocket) 일단 DatagramSocket클래스의 자식 클래스를 알아보자. DatagramSocket클래스의 자식 클래스는 MutilcastSocket이다. 우선 자바API에서 MulticastSocket을 살펴보자. 가기 귀찮아서 퍼왔다. 잘 해석해서 이넘이 무엇을 하는 넘인지 살펴보자. public class MulticastSocket extends DatagramSocket The multicast datagram socket class is useful for sending and receiving IP multicast packets. A MulticastSocket is a (UDP) DatagramSocket, with additional capabilities for joining "groups" .. 더보기
자바 네트워크(Network) - UDP방식 예제 UDP방식은 TCP와 달리 하나의 소켓으로 통신한다. DatagramSocket이라는 것으로.. 이 클래스에 자세한것은 자바 API를 찾아보자. http://docs.oracle.com/javase/7/docs/api/ 일단 확인 해야 할 부분은 Constructor중 파라미터가 없는건 클라이언트용. 파라미터가 있는건(포트번호) 서버에서 사용할것이라는것만 알아두자. 그리고 DatagramePacket 클래스도 잘 살펴보자. 우선 오늘의 점심 메뉴를 서버에 요청해서 가져 오는걸 해보자. 1. 점심메뉴를 랜덤으로 뽑아줄 클래스를 하나 만들자. 2. 서버를 만들어 보자. 3. 클라이언트를 만들어 보자 자세히 보면 클라이언트와 서버 프로그램이 거의 비슷하다 소켓은 DatagramSocket이라는거 하나만 사용하.. 더보기
자바 네트워크(Network) - Thread를 이용한 TCP/IP 예제 Thread를 이용한 TCP / IP예제이다. 복수의 클라이언트에서 요청 받은 것을 서버에서는 각각 쓰레드를 생성해서 에코형식의 메세지를 클라이언트에게 전달 해 준다. 우선 서버 프로그램 코드를 보자. 이전에 썼던 내용과 다를게 없다. 서버 소켓, 클라이언트용 소켓 생성해서 무한 루프 돌면서 클라이언트 요청을 받는다. 다만 while문에서 쓰레드를 각각 생성해서 쓰레드에서 에코가 되게 요청단위로 처리해 준다. 쓰레드를 구현한 소스를 보자. 쓰레드기 때문에 서버 프로그램에서 클라이언트 요청이 들어 왔을때 생성자로 요청을 읽고 다시 요청응답을 돌려주기 위해서 InputStream과 OutputStream을 생성하였다. 그리고 run에서는 요청 내용을 읽고 다시 클라이언트로 요청내용을 그대로 돌려 준다(에코,.. 더보기
재미로 보는 맥주 서열 와인 테이스팅에 약간의 취미가 있었는데 맥주 테이스팅에도 한번 도전해봐야 겠다. 소싯쩍 소주파였는데 이제는 술 잘 못먹는다 간단하게 한두잔 정도. 아래 사진이 나에게 세계맥주 도전에 불을 지폈다. 이걸 언제 한번 다 먹어 볼까? Bar나 Pub에서 먹으면 비싸겠지...리쿼스토에서 하나씩 사서 먹어 보자. 갑부가 아니라..한병씩만.. 뭐 사실 자기 입맞에 맞는게 가장 좋은거지만. 참고로 나도 안다 독일 및 유럽에는 훨씬 더 맛있는 하우스 맥주가 수백가지도 넘는거. 난 거기 안사니까..아래걸로 한번 평가 해볼련다. 더보기
JAVA I/O (자바입출력) - RandomAccessFile 원래 스트림(Stream)은 원칙적으로 순서대로 처리 된다. 하지만 예외적으로 접근처리를 할 수 있는것이 있다. 바로 RandomAccessFile이라는 것이다. 말 그대로 임의로 파일에 접근하는것이다. 자바 API를 보면 이 클래스는 Input이나 OutputStream같은 Stream으로 상속 받는게 아니고 바로 위의 클래스가 Object다. 메소드들 중 살펴볼 만한것은 seek메소드다. 레코드 바늘 처럼 원하는 곳을 찍어서 갈 수 있다. 무슨말이냐면 데이터 1,2,3,4,5,6을 Stream객체를 사용해서 쓰면 가져올때도 순차적으로 가져와야 하는데 RandomAccessFile을 쓰면 위치를 지정해서 꺼내올수 있다. 예제를 살펴보자. 우선 저장할 더블 배열 값을 선언한다. RandomAccessFi.. 더보기
JAVA I/O (자바입출력) - FileInputStream와 FileOutputStream를 이용한 파일 복사 이전글에 각각 FileInputStream과 FileOutputStream을 이용해 봤다. 모르면 아래 주소에서 http://happyourlife.com/77 그러면 이 두개를 이용하면 파일을 복사 할수 있다. 우선 FileInputStream으로 파일 내용을 읽어서 FileOutputStream으로 다른 파일에 읽어드린 내용을 쓰면 될것이다. 예제도 정말 간단하다. 기억하자. 별거 아니다. 위의 에제를 실행해보면 test.txt파일을 읽어서 test2.txt에다 읽은 내용을 쓴다. 일단 이 예제의 전제 조건은 test.txt파일안에 내용이 있을것 두번째는 test.txt와 test2.txt파일이 존재 할것이다. 사실 나중에 File클래스를 하다 보면 파일이나 폴더가 있는지 없는지 체크해서 생성후 쓰고.. 더보기