Eu li um artigo que diz que o Scala lida com a concorrência melhor que o Java.
http://www.theserverside.com/feature/Solving-the-Scalability-Paradox-with-Scala-Clojure-and-Groovy
... a limitação de escalabilidade está confinada especificamente à própria linguagem de programação Java, mas não é uma limitação da plataforma Java como um todo ...
Os problemas de escalabilidade do Java não são uma nova revelação. De fato, muito trabalho foi feito para resolver esses problemas, com dois dos projetos mais bem-sucedidos sendo as linguagens de programação denominadas Scala e Clojure ...
... Scala está encontrando maneiras de contornar o problemático thread e o paradigma de bloqueio da linguagem Java ...
Como isso é possível? O Scala não usa as principais bibliotecas do Java, o que traz todos os problemas de encadeamento e bloqueio do Java para o Scala?
fonte
É uma questão de suporte de biblioteca. Java usa a construção Thread de baixo nível para representar simultaneidade (é como a linguagem assembly do mundo da simultaneidade). Existem muitas bibliotecas e técnicas que você pode usar para criar soluções escaláveis, como usar o suporte fornecido pelo pacote java.util.concurrent e seguir as técnicas de Brian's Goetz em seu livro Java Concurrency in Practice. O Scala ajudou a introduzir coisas como a estrutura Akka (agora utilizável pelo Java agora) que integra algumas dessas práticas recomendadas e suporte à biblioteca. Isso não quer dizer que a linguagem Java não possa alcançar (coleções paralelas etc.), como Kilian afirma, tudo é executado na JVM e, portanto, na JMM.
Além disso, os objetos de Java também são mutáveis por padrão e requerem algum conhecimento não trivial para torná-los efetivamente imutáveis. Scala supostamente facilita a criação de objetos imutáveis
fonte
Bem, sim, e se você trancar o Scala, enfrentará os mesmos problemas. O ponto, no entanto, é que você não deveria, pois o Scala fornece abstrações que lidam com esse problema de maneira mais segura.
Agora, Scala faz duas coisas que realmente ajudam. Um deles é o modelo de ator, que pode ser pensado como um padrão de simultaneidade, fornecido por Scala como uma biblioteca. Se você é um programador Java, sugiro que você vá ao site da Akka e veja as coisas em Java. Essa é a biblioteca que substituirá a atual biblioteca de atores do Scala e você poderá usá-la no Java.
A segunda coisa que Scala faz que ajuda é usar estruturas de dados imutáveis. Não há nada que impeça o Java de usar estruturas de dados imutáveis -
String
por um lado, é imutável! As estruturas de dados imutáveis não sofrem de problemas de simultaneidade, pois os threads não podem alterá-las.Há outras coisas que se somam a elas, para criar soluções completas, como agentes e stm (ambos disponíveis na Akka) ou travas (do Java).
Agora, as duas coisas acima podem ser feitas em Java, como eu mesmo disse. Você pode usar o Akka em Java e gravar estruturas de dados imutáveis em Java (ou usar em bibliotecas que as fornecem). No entanto, Java faz mal ao usar essas coisas, porque não suporta tipos de ordem superior, nem fechamentos e funções de primeira classe.
Portanto, enquanto você pode fazer isso, os programadores geralmente não o fazem porque, em Java, escrever esse código é muito detalhado (quero dizer, muito mais do que o padrão para Java).
fonte
O pensamento principal do artigo referenciado é:
Eu não posso concordar com isso. O uso de idiomas da JVM como o Scala implica:
usando suporte de tempo de execução específico. Este suporte pode ser acessado diretamente a partir de programas Java.
sintaxe específica, permitindo expressões concisas para facilitar o acesso ao suporte ao tempo de execução e menos propenso a erros. Isso é verdade, e escrever em Java puro é mais detalhado e requer mais disciplina, mas a diferença não é tão dramática.
Em resumo, o Scala lida com a concorrência melhor do que o Java por usar o modelo do Actor. O modelo do ator pode muito bem ser empregado em Java. Existem várias bibliotecas de atores para Java, incluindo Akka (usado pelo Scala), portanto, mudar para o Scala não é um imperativo.
O uso do modelo Actor via Java puro tem suas próprias vantagens:
fonte