Articles of simultaneidade

Contêiner Jboss Java EE e um ExecutorService

Eu tenho um aplicativo java autônomo que usou o ExecutorService para processar um número de trabalhos em paralelo ExecutorService es = Executors.newFixedThreadPool(10); Agora, quero reutilizar a mesma solução em um bean EJB, mas não tenho certeza de como inicializar corretamente o ThreadPool, pois normalmente deixaria o contêiner Java EE para controlar todos os resources de […]

CountDownLatch vs. Semaphore

Existe alguma vantagem de usar java.util.concurrent.CountdownLatch ao invés de java.util.concurrent.Semaphore ? Tanto quanto eu posso dizer os seguintes fragments são quase equivalentes: 1. Semáforo final Semaphore sem = new Semaphore(0); for (int i = 0; i < num_threads; ++ i) { Thread t = new Thread() { public void run() { try { doStuff(); } […]

Implementações Java Queue, qual delas?

De Javadoc: Um ConcurrentLinkedQueue é uma escolha apropriada quando muitos segmentos compartilharão o access a uma coleção comum. Essa fila não permite elementos nulos. ArrayBlockingQueue é um “buffer limitado” clássico, no qual uma matriz de tamanho fixo contém elementos inseridos pelos produtores e extraídos pelos consumidores. Esta class oferece suporte a uma política de justiça […]

Como funciona o padrão de disruptor do LMAX?

Eu estou tentando entender o padrão disruptor . Eu assisti o vídeo da InfoQ e tentei ler o artigo deles. Eu entendo que há um buffer de anel envolvido, que é inicializado como uma matriz extremamente grande para tirar proveito da localidade do cache, eliminar a alocação de nova memory. Parece que há um ou […]

Goroutine não executa se time.Sleep included

O código a seguir funciona perfeitamente bem: package main import ( “fmt” ) func my_func(c chan int){ fmt.Println(<-c) } func main(){ c := make(chan int) go my_func(c) c<-3 } playgound_1 No entanto, se eu mudar c<-3 para time.Sleep(time.Second) c<-3 playground_2 Meu código não é executado. Minha intuição é que, de alguma forma, o main retorna […]

O que é um semáforo?

Um semáforo é um conceito de programação que é freqüentemente usado para resolver problemas de multi-threading. Minha pergunta para a comunidade: O que é um semáforo e como você o usa?

Listar para a sequência Futura

Eu estou tentando converter List<CompletableFuture> para CompletableFuture<List> . Isso é muito útil quando você tem muitas tarefas assíncronas e precisa obter resultados de todas elas. Se algum deles falhar, o futuro final falhará. É assim que eu implementei: public static CompletableFuture<List> sequence2(List<CompletableFuture> com, ExecutorService exec) { if(com.isEmpty()){ throw new IllegalArgumentException(); } Stream<? extends CompletableFuture> stream […]

Quando devo usar um CompletionService em um ExecutorService?

Acabei de encontrar CompletionService nesta postagem do blog . No entanto, isso realmente não mostra as vantagens do CompletionService em relação a um ExecutorService padrão. O mesmo código pode ser escrito com um ou outro. Então, quando é um CompletionService útil? Você pode dar uma amostra de código curto para deixar claro? Por exemplo, este […]

Escreva um programa que certamente entrará em deadlock

Recentemente, recebi estas perguntas em uma entrevista. Eu respondi que o impasse ocorre se a intercalação der errado, mas o entrevistador insistiu que um programa que sempre entrará em impasse, independentemente da intercalação, pode ser gravado. Podemos escrever um programa desses? Você pode me indicar algum programa de exemplo como esse?

O que é o algoritmo de agendamento da JVM?

Eu estou realmente curioso sobre como a JVM trabalha com threads! Nas minhas buscas na internet, encontrei algum material sobre o RTSJ, mas não sei se são as instruções certas para as minhas respostas. Eu também encontrei este tópico nos fóruns do sol, http://forums.sun.com/thread.jspa?forumID=513&threadID=472453 , mas isso não é satisfatório. Alguém pode me dar algumas […]