JAVA/Thread
-
Thread joinJAVA/Thread 2020. 10. 12. 18:30
join은 완전히 양보하는 함수이다. join을 한 스레드는 대기 상태(wait)로 된다. 이 대기 상태를 풀어주는 방법도 있다. join함수의 매개변수로 시간을 넣어주면 된다. 그러면, 넣어준 시간 후에 다시 스레드가 작업을 한다. 즉, join함수는 오버로딩되어 있는 함수이다. 프로그램 실행결과 threada1 쓰레드는 i가 10일 때, join함수가 호출이 되는데, 매개변수로 2초가 전달된다. 이는 2초 후에 threada1이 호출되어 작업을 진행하는 것을 볼 수 있다. 이번에는, join함수의 매개변수를 주지 않고 호출해보자. 프로그램 실행결과 위의 결과를 보다시피, threada1은 양보를 한 이후에, 작업을 완료하지 못한 상태로 있는다. 소스 파일
-
Thread의 StateJAVA/Thread 2020. 10. 12. 18:17
프로그램 실행결과 소스 파일 StatePrintThread클래스의 run함수에서 targetThread 스레드가 NEW상태면 targetThread 스레드의 start함수를 호출하는 내용이다. 그리고 나서 targetThread 스레드의 상태가 종료 상태이면 작업을 종료한다. TargetThread 클래스의 run함수의 맨 마지막 sleep함수를 주석처리하고 실행을 해보자. * 1.StatePrintThred객체는 스레드로 동작하며 작업을 계속진행하는 객체이다. * 2.위의 객체를 생성하면서 다른 쓰레드 객체를 전달받아 저장한다. * 3.저장된 객체는 start()함수를 이용해 실행되지 않은 상태이다. 이 때 getState()함수를 이용하여 현재 상태를 확인할 수 있다. * 4.start()함수가 실행..
-
스레드 자원의 동기화 (키워드 synchronized)JAVA/Thread 2020. 10. 12. 17:59
우선 앞에서 스레드는 시 분할 방식이라고 하였다. 예제1 프로그램 실행결과 소스 파일 예제2 위의 소스를 계속 실행해서 프로그램 결과는 세 종류로 나뉜다. case1 case2 case3 소스 파일 위의 소스에서 Sleep함수의 주석을 제거해보자. 주석을 제거한 부분은 아래의 클래스이다. 프로그램 실행결과 일반적인 경우라면 USER1에서 100의 값이 출력되어야 하는데, 200이 출력 되는 이유는 Sleep함수 때문이다. User1 쓰레드가 작업을 하려고 할 때 메모리 변수에 100값을 저장하고 나서 바로 2초 간의 지연이 발생하는데, 이 때 User2쓰레드가 시작 되어 메모리 변수에 200값을 저장하고 나서 이 User2 쓰레드도 2초 간의 지연이 발생한다. 이 때 메모리 변수에는 200값이 저장되어 ..
-
Thread와 자원 공유 - 멤버필드, static필드JAVA/Thread 2020. 10. 8. 18:25
Thread와 자원 공유 - 멤버필드, static필드 - 같은자원(같은 객체의 멤버필드)을 여러개의 쓰레드가 공유할 수 있다. - 문제점발생 : 좌석예약, 계좌입출금 등등 - 문제점은 동기화 처리(synchronized)로 해결할 수 있다. 멤버 필드 예제 프로그램 실행결과의 일정부분 소스 파일 static 필드 예제 아래의 프로그램에서 MemberPrint클래스의 필드 i가 static이고 prviate임을 기억하자. 아래의 프로그램이 100번 도는 이유는 static 때문이다. 실행결과를 참고하자. 실행결과를 보면 필드 i가 static으로 선언이 되어있으면 MemberPrint의 객체들이 모두 i값을 같이 참조를 해야한다. 그런데 프로그램 실행결과를 보면 스레드 A,B,C모두 i가 0일 때를 실행..
-
Thread의 기초JAVA/Thread 2020. 10. 7. 18:30
Thread의 개념 - Process: thread의 집합으로 하나의 exe, com, dll 프로그램을 말한다. . 현재 실행되고 있는 프로그램이다. . Process간 자원(memory)을 공유할 수 없다. 따라서 Process를 많이 발생 시키면 자원이 바닥나게 된다. - Thread: . 독립된 작은 실행단위로 프로세스를 구성. . 반복적으로 동기화하여 실행되는 프로그램 루틴. . 메소드(함수)단위의 처리 모듈, process의 구성 요소. . Thread는 많이 발생해도 자원을 공유함으로 Process에 비해 시스템에 적은 부담. . 각각의 Thread는 자신의 일을 하고 있으며, 동시에 실행되지 않는다. . 스레드 스케줄러에 의해서 스레드의 여러상태중 실행상태로 변경할 수 있다. . 스레드의 ..