brr..
215
2019-06-25 21:50:00
4
724

multiThread 환경에서 thread 별로 sleep이나 delay를 할 수 있을까요?



프로젝트를 진행하면서 Thread 별로 sleep 또는 interval을 두어서 요청하게 해야하는데 방법이 있을까요?


Thread.sleep을 사용하려 했는데 Thread.sleep은 멀티 쓰레드 환경에서 각 쓰레드에 적용되지는 않는것 같네요 ㅠㅠ


찾아봐도 잘 나오지 않아 질문드립니다.

0
  • 답변 4

  • Frudy
    7k
    2019-06-25 22:12:45

    좀더 구체적으로

    혹은 실제코드를 보여주실수있나요?

  • 멘탈조각
    1k
    2019-06-25 22:29:26

    쓰레드 안에서도 슬립은 되어야 정상입니다.

    더 자세한 내용이 필요합니다.

  • brr..
    215
    2019-06-25 22:44:59


                while (Instant.now().toEpochMilli() < expireTime) {
                    if (acquireLock(key, expireTime)) {
                        try {
                            final Object object = joinPoint.proceed();
                            return object;
                        } catch (Throwable  throwable) {
                            throw throwable;
                        } finally {
                            globalLockTemplate.del(key);
                        }
                    }
                    Thread.sleep(interval);
                }
                throw new TxTimeoutException("Timeout occurs.");


    코드는 다음과 같은데요!!


    멀티쓰레드 환경에서 동기화를 위한 코드입니다. lock을 얻지 못 했을 경우 쓰레드 별로 interval(20ms)를 기다리고 시간이 expired 되지 않았으면 다시 acquireLock을 요청합니다.

    흠 Thread.sleep이 작동해야 정상인가요?? 다시 시도해봐야겠네요!! 감사합니다!!

  • rvo
    102
    2019-06-25 23:51:04
    acquireLock(key, Instant.now().toEpochMilli() + interval)로 고치시면 됩니다.
  • 로그인을 하시면 답변을 등록할 수 있습니다.