Doesn't Scala use Java's core libraries which brings all the threading
and locking issues from Java to Scala?
Bene, sì, e se lo fai chiudendo in Scala dovrai affrontare gli stessi problemi. Il punto, tuttavia, è che non dovresti, dato che Scala ti fornisce astrazioni che gestiscono questo problema in maniera più sicura.
Ora, Scala fa due cose che aiutano davvero. Uno di questi è il modello dell'attore, che può essere considerato come uno schema di concorrenza, fornito da Scala come una libreria. Se sei un programmatore Java, ti suggerisco di andare al sito Akka e guardare le loro cose Java. Questa è la libreria che sostituirà l'attuale libreria degli attori di Scala, e puoi usarla da Java.
La seconda cosa che Scala aiuta è l'uso di strutture di dati immutabili. Non c'è nulla che impedisca a Java di utilizzare strutture dati immutabili - String
, per esempio, è esso stesso immutabile! Le strutture di dati immutabili non soffrono di problemi di concorrenza poiché i thread non possono modificarle.
Ci sono altre cose che si aggiungono a queste, per creare soluzioni complete, come agenti e stm (entrambi disponibili da Akka), o latch (da Java).
Ora, le due cose sopra possono essere fatte in Java, come ho detto io stesso. È possibile utilizzare Akka in Java e scrivere strutture di dati immutabili in Java (o utilizzare dalle librerie che li forniscono). Tuttavia, Java rende doloroso utilizzare questa roba, perché non supporta né tipi di ordini più alti, né chiusure e funzioni di prima classe.
Quindi, mentre puoi farlo, i programmatori di solito non lo faranno perché, in Java, scrivere questo codice è molto prolisso (intendo, molto più dello standard per Java).