[Java] Thread 상속 대신 Runnable 을 사용하라.
·
JVM/Java
결론Thread 상속 대신 Runnable 구현을 택하라. (1) 상속보다 구현이 더 유연하다.Java는 다중 상속을 허용하지 않기 때문에 이미 다른 클래스를 상속중인 클래스에 Thread 추가 상속은 불가능하다.반면에, 인터페이스는 얼마든 구현할 수 있다.// FIXME: 다중상속은 허용되지 않는다.class MyService extends Service, Thread {} (2) Runnable 은 실행할 작업만 정의할 수 있다.쓰레드를 사용하는 개발자의 주 관심사는 보통 만들고자 하는 쓰레드가 '무슨 일'을 할 것인지다.Runnable 인터페이스를 구현함으로써 '무슨 일'을 할지만 정의하면된다.즉, 필요한 만큼의 역할만 갖는다.  class PrintRunnable implements Runnabl..
pthread 함수 예제2
·
LINUX/Linux
프로그램 목적 각각 매개변수의 값 (0~9)를 출력하는 10개의 쓰레드를 생성하여 화면에 쓰레드 아이디-매개변수값 0~9를 출력하는 프로그램을 만들어보자. 도중에 쓰레드 생성에 실패하면 실패 에러메시지를 띄우고 해당 id의 쓰레드의 값은 출력하지 않고 다음라인으로 넘어간다! 이 코드에는 문제가 있다! 모든 쓰레드가 0~9이 아니라 10을 출력한다 for (i = 0; i < NUMTHREADS; i++) if (perror = pthread_create(tid + i , NULL, printarg, (void *)&i)) { // ~~ (중략) } 이 코드가 원인이다. 사실 pthread_create를 호출하면 메인은 OS에게 "쓰레드를 생성해줘!"라고 요청을 보내고 '요청에 성공!'하기만 하면 0을 바..
pthread 함수 예제
·
LINUX/Linux
만들고자 하는 프로그램 개요 정의 a.txt 에 쓰여있는 내용을 b.txt 로 복사하며 몇 바이트가 복사된 것인지 메시지를 띄우고자한다.! 1. 먼저 파일 내용을 복사할 함수 'copyfilemalloc'을 들여다보자. Q1. 만약 동적 메모리 할당이 아닌 bytesp를 static으로 선언한다면? A. 하나의 쓰레드에서는 읽고 쓰는데 문제가 없지만 2개 이상의 쓰레드가 bytesp를 이용할 경우 둘다 같은 장소에 바이트수를 저장하므로 한 쓰레드가 다른 한쪽의 값을 덮어 씌우는 결과가 발생.. Q2. 동적 메모리 할당의 단점은? A. 메인 쓰레드가 명시적으로 '해제' 해주지 않으면 메모리 leak 이 발생한다. Q3. 다른 대안은? A. 생성자 쓰레드 (create할때 생성된 스레드)가 한 공간을 별도로..