¿Scala no usa las bibliotecas principales de Java que traen todos los problemas de enhebrado y bloqueo de Java a Scala?
Bueno, sí, y si bloqueas Scala te enfrentarás a los mismos problemas. Sin embargo, el punto es que no debes hacerlo, ya que Scala te proporciona abstracciones que manejan este problema de una manera más segura.
Ahora, Scala hace dos cosas que realmente ayudan. Uno de ellos es el modelo de actor, que puede considerarse como un patrón de concurrencia, proporcionado por Scala como una biblioteca. Si eres un programador de Java, te sugiero que vayas al sitio de Akka y veas sus cosas de Java. Esta es la biblioteca que reemplazará la biblioteca de actores actual de Scala, y puede usarla desde Java.
La segunda cosa que Scala hace que ayuda es usar estructuras de datos inmutables. No hay nada que evite que Java use estructuras de datos inmutables String
, por ejemplo, ¡es inmutable en sí mismo! Las estructuras de datos inmutables no sufren problemas de concurrencia ya que los hilos no pueden cambiarlos.
Hay otras cosas que se suman a estas, para crear soluciones completas, como agentes y stm (ambos disponibles de Akka), o pestillos (de Java).
Ahora, las dos cosas anteriores se pueden hacer en Java, como dije yo mismo. Puede usar Akka en Java, y puede escribir estructuras de datos inmutables en Java (o usar desde bibliotecas que las proporcionan). Sin embargo, Java dificulta el uso de estas cosas, ya que no admite tipos de orden superior, ni cierres y funciones de primera clase.
Entonces, aunque puede hacerlo, los programadores generalmente no lo harán porque, en Java, escribir dicho código es muy detallado (es decir, mucho más que el estándar para Java).