Thread에 관해..
찬늘
Thread로 프로그램을 짜는 도중에 문제가 생겨서 질문을 하게 됩니다..
main에서 A Thread를 실행 시키고 A에서 B Thread를 동작시키게 되었습니다..
이때.. B에서 DB Select작업을 하게 되는데 이 작업이 5분이 걸리게 되면 A Thread도 B의 DB Select가 끝날때까지 동작을 하지 않게 되나요??
인터넷에서 Thread에 대해 찾아 보니 java는 하나의 Thread만이 Run상태가 되고 나머지는 Runable상태로 큐에 있다고 하더라구요.. 이때 Run 상태인 Thread가 wait, 종료, I/O작업(I/O작업이 맞는지 정확히는 모르겠어요)의 상태가 되야 다른 Thread가 Runable에서 Run상태로 변경이되어 동작을 한다고 하는 것 같더라구요..
이 말이 맞다면 B Thread에서 DB작업시 지연 또는 데드락이 걸리면 그 이후로 다른 Thread가 동작을 하지 못하게 되나요??
아니면 B Thread에서 DB작업시 지연 또는 데드락이 걸리더라도 다른 Thread가 동작을 하나요?? 못한다면 할 수 있도록 하는 방법이 있을까요?? 이때 B를 종료시키면 않되구요.. B도 계속 하던 일을 계속 해야 합니다..
-
아잉누님
넹.. ㅎㅎ
-
푸르나
아.. Thread문제가 아니라 자원공유가 문제 였네요.. 찬님 감사합니다..
-
풍란
main - A 실행
A - B 실행 하면,
A와 B 스레드가 죽지 않는한 세개의 스레드는 동시에 수행됩니다.
하나의 Thread만 run상태로 나머지는, Runnable상태로 큐에 있다고 하는건 ;;
어디서 보신건지..; 잘 이해가 되지 않네요.
만약 B 스레드에서 특정자원(DB라던지,파일이라던지)에 대해서 lock를 잡은 상태에서
오랜 시간이 걸리는 작업을 하고 있는 도중에,
A 스레드에서 B스레드가 lock을 잡은 자원을 쓰려고 하면, 쓰지