Si creo una instancia única de un Comparador, ¿se puede usar esa instancia en varios subprocesos para ordenar las colecciones mediante Collections.sort()? O bien, ¿necesito crear una nueva instancia del Comparador para cada llamada a Collections.sort() para garantizar la seguridad del hilo?En Java, ¿es seguro un Comparador utilizado en Collections.sort()?
Respuesta
Eso depende completamente de cómo implemente el Comparator
. Si, por ejemplo, tiene variables de instancia que se escriben en o cuyos contenidos se cambian implícitamente durante la comparación, no sería seguro.
La mayoría de las implementaciones de Comparator
no hacen tal cosa, pero un escenario que podría ocurrir razonablemente es usar un SimpleDateFormat
para comparar cadenas que representan fechas. Lamentablemente, SimpleDateFormat
no es seguro para subprocesos.
Comparador es una interfaz, no tiene propiedades de simultaneidad inherentes. Depende de cómo lo escriba si su implementación es segura o no. Si todo lo que hace se limita al alcance del método de comparación (sin instancias o estado de nivel de clase) y todos los recursos que utiliza son seguros para la ejecución de los hilos, entonces será en sí mismo seguro para la tarea.
Me sorprendería mucho si encontrara un Comparador que no sea seguro para subprocesos, ya que generalmente (¿siempre?) Se reentran.
El problema de concurrencia sería si la colección que se estaba ordenando se cambiaba mientras se producía el ordenamiento.
- 1. Java Comparador
- 2. Interbloqueado utilizado para incrementar/imitar un booleano, ¿es esto seguro?
- 3. Uso del comparador para ordenar ArrayList Java
- 4. comparador de java, ¿cómo ordenar por entero?
- 5. Java: ¿ServerSocket.accept es seguro?
- 6. ¿Java MulticastSocket es seguro?
- 7. Java: Comparable vs Comparador
- 8. Comparador directo en Java de fábrica
- 9. ¿Es seguro Java?
- 10. Cómo obtener el inverso de un comparador en java
- 11. ¿Es seguro Java Regex Thread?
- 12. Java TreeMap (comparador) y obtienes el método ignorando el comparador
- 13. ¿Qué compilador Java es utilizado por NetBeans?
- 14. ¿Es TimeZone de Java seguro para subprocesos?
- 15. Compaginadora más Comparador
- 16. Java Collections.sort - me ayuda a quitar la advertencia sin control
- 17. Genéricos de Java: Collections.max() firma y comparador
- 18. Comparador vs Apache BeanComparator
- 19. Comparador Java para matriz de bytes (lexicográfica)
- 20. ¿DocumentBuilderFactory es seguro para subprocesos en Java 5+?
- 21. ¿Qué tan seguro es el thread enum en java?
- 22. Java ConcurrentHashMap no es seguro ... ¿con wth?
- 23. clase Java comparador para ordenar matrices
- 24. Cola de prioridad de Java con un comparador anónimo personalizado
- 25. Java Transport.send() ¿es seguro para subprocesos?
- 26. ¿Es seguro un subproceso PrintWriter de socket Java?
- 27. Comparador de interfaz Java estático compare
- 28. ¿Cómo usar el comparador de Java correctamente?
- 29. ¿Es seguro || = en Ruby thread?
- 30. ¿Cuán seguro es mi regreso seguro?
Es razonable que pueda estar utilizando algún recurso dentro del método de comparación que no sea seguro para subprocesos. Una colección no sincronizada, un calendario, etc. editar: lo que dijo Michael B^ – Affe
Tienes razón, no había contemplado esos casos. – Artefacto