Thread SO
Um programa é um conceito estático, isto é, um programa é um arquivo em disco que contém um código executável por uma CPU. Quando este programa é executado dizemos que ele é um processo. Portanto um processo é um programa em execução, ou um conceito dinâmico. Note que um programa em execução aloca recursos, como memória, disco, impressora, isto é tudo o que precisa para ser executado. Podemos até considerar a CPU como um recurso alocado por um processo, uma vez que podem haver vários processos em execução ao mesmo tempo e só um deles está com o recurso CPU num determinado instante.
Um mesmo programa pode ser executado várias vezes simultaneamente. Assim, podemos ter um só programa e vários processos (deste programa) em execução simultaneamente. Uma outra forma de dizer é que temos várias linhas de execução deste programa.
O sistema operacional controla a execução dos vários processos:
a) dando uma fatia de tempo para cada um de acordo com algum esquema de prioridade.
b) garantindo o sincronismo entre os processos quando os mesmo precisam trocar informações.
Threads em Java.
Java é a primeira linguagem de programação a incluir explicitamente o conceito de Threads na própria linguagem .
Se voce escreveu algum programa em Java então já fez um programa multithreaded. Todo programa em Java possui pelo menos uma thread: a thread main. Além dessa, a máquina virtual mantém algumas outras que realizam tarefas como coleta de lixo ou finalizaçao de objetos.
Algumas classes disponíveis na API de Java também utilizam threads em suas implementações. Como exemplo, podemos citar as classes de Java Swing ou as classes da implementação de RMI. Em Java é possível lançar várias linhas de execução do mesmo programa. Chamamos a isso de Threads ou MultiThreading. A diferença com os processos e programas acima é que o Java é interpretado. Quem cuida dos vários Threads de um programa é o próprio interpretador Java. Algumas vantagens em relação aos processos: