2017-03-18 3 views
0

ThreadLocal은 데이터를 특정 스레드에 바인드합니다. CompletableFuture의 경우 스레드와 다를 수있는 스레드 풀의 스레드와 함께 실행됩니다.CompletableFuture에서 ThreadLocal을 사용하는 것이 안전합니까?

CompletableFuture가 실행될 때 ThreadLocal에서 데이터를 가져올 수 없다는 뜻입니까?

+1

예. 각 스레드가 원하는 ThreadLocal 변수를 전달하는 자체 스레드 풀을 준비하지 않는 한. –

+0

@AlexeiKaigorodov thenAppAppAsync 대신에 thenAppApply를 사용하면, 항상 동일한 스레드에서 실행할 수 있다는 보장은 있습니까? 그래서 ThreadLocal을 사용하여 데이터를 저장/읽을 수 있습니다. – franziga

+1

어떤 스레드가 thenApply가 실행되는지에 대한 보장은 없습니다. 일부 공통 데이터에 액세스하려면 해당 데이터를 클래스 변수에두고 해당 클래스의 메소드를 매개 변수로 사용하여 thenApply()를 작성하십시오. –

답변

0

예, scala Futures에는 thenCompose/thenApply 메소드 (즉, flatMap/map 메소드)를 통해 상태를 전송하는 Local.scala가 있습니다. Java는 플랫폼 개발자가 플랫폼에서 클라이언트 코드로 상태를 전달하여 플랫폼으로 다시 호출하는 플랫폼을 만드는 것이 매우 어렵다는 사실을 정말로 놓치고 있습니다. 상당히 초조하지만 스칼라는 너무 많은 기능 (부엌 싱크와 같음)을 가지므로 간결하면서도 사람을 포함한 모든 사람들이 다른 선택을하는 경향이 있으므로 프로젝트가 빠르게 제어 불가능 해집니다.

관련 문제