https://c-king.tistory.com/620

Pinning 문제

아래 상황에서는 virtual thread가 carrier thread에 고정(pinned)돼서, 사실상 일반 스레드처럼 동작해버릴 수 있다.

  1. synchronized 블록/메서드 안에서 blocking
synchronized (lock) {
    // 여기서 I/O, sleep, monitor enter 등 블로킹
    socket.read();  // 가령 이런 식
}

이런 경우:

  1. Native / JNI 호출, 블로킹 OS 호출

virtual thread가 JVM 밖의 native 코드(JNI, 외부 라이브러리)를 호출할 때:

ThreadLocal 남용