나는 쉼표, 수천을 분리하여, 단순히 더 읽기 숫자를 문자열로 변환하는 java.text.NumberFormat의를 사용하는 등 기본적으로 내가로 정의 :Java : NumberFormat과 동기화 문제가 있습니까?
public static NumberFormat nf = NumberFormat.getInstance(Locale.US);
... 그리고 난 그냥 (nf.format 전화 some_number) 숫자의 읽을 수있는 버전을 만들고 싶은 모든 스레드에서. 그러나 JavaDoc을 보면 "숫자 형식은 일반적으로 동기화되지 않으므로 각 스레드마다 별도의 형식 인스턴스를 만드는 것이 좋습니다. 여러 스레드가 동시에 형식에 액세스하는 경우 외부에서 동기화해야합니다."
NumberFormat 개체의 format (number) 메서드 만 사용하는 경우 동기화 문제가있을 수 있습니까? 대신 NumberFormat.getInstance (Locale.US) .format (number)를 사용하여 시도해 보았습니다.하지만 실제로 필요할 필요가 없을 때마다 그렇게하는 것과 관련된 오버 헤드가 있습니다. 이 작업에 외부 동기화가 필요합니까? 아니면 NumberFormat을 사용하지 않고도 동일한 작업을보다 간단하고 효율적으로 수행 할 수 있습니까?
감사합니다.
https://gist.github.com/jontejj/5430320을 사용하여 측정 한 결과는 http://1.microbenchmarks.appspot.com/run/[email protected]/se.softhouse에서 게시됩니다. .common.numbers.NumberFormatBenchmark는 서식 지정 숫자가 유일한 일이면 이득이 실제로 상당히 큽니다. NumberFormat은 생성 된 포맷터에 대한 캐시를 유지하고 반환하기 전에 복제합니다. – jontejj
그리고 똑같은 모든 하위 클래스에 적용됩니다. 특히 DateFormat – Snicolas