encadeamentos Java
Um método, Thread directamente
// 创建线程对象
Thread t = new Thread() {
public void run() {
// 要执行的任务
}
};
// 启动线程
t.start();
O segundo método utilizado com segmento executável
O [thread] e [tarefa] (código a ser executado) separadamente
- fio representantes do Tópico
- Tarefas (threads de código a ser executado) executável Runnable
Runnable runnable = new Runnable() {
public void run(){
// 要执行的任务
}
};
// 创建线程对象
Thread t = new Thread( runnable );
// 启动线程
t.start();
Tópico da relação entre o princípio eo Runnable
- Método 1 é o fio ea tarefa mesclados, o método 2 é separar os fios e tarefas
- Com
Runnable
mais fácil e pool de threads API com outros altos - Com
Runnable
soltou das herda classe Thread do sistema de tarefas, mais flexível
Portanto, tente usarRunnable
Método três, FutureTask com linha
Onde FutureTask resgatáveis tipos de parâmetros pode ser recebido, o processamento tem de resultados de retorno
// 创建任务对象
FutureTask<Integer> task3 = new FutureTask<>(() -> {
log.debug("hello");
return 100;
});
// 参数1 是任务对象; 参数2 是线程名字,推荐
new Thread(task3, "t3").start();
// 主线程阻塞,同步等待 task 执行完毕的结果
Integer result = task3.get();
log.debug("结果是:{}", result);
Observe vários segmentos para executar simultaneamente
- realizada alternadamente
- Para trás, não são nós controlamos
Ver método segmento do processo
janelas
- Gerenciador de tarefas pode verificar processos e threads, ele também pode ser usado para matar o processo
tasklist
Ver o processotaskkill
Matar o processo de
linux
ps -fe
Ver todos os processosps -fT -p <PID>
Ver um processo (PID) de todos os tópicoskill
Matar o processo detop
H maiúsculo alternância rosca visortop -H -p <PID>
Ver um processo (PID) de todos os tópicos
Java
jps
Comando para visualizar todos os processos Javajstack <PID>
Ver todos os tópicos de um estado processo de Java (PID)jconsole
Para exibir uma encadeamentos Java no processo de operação (GUI)
jconsole para a configuração de monitoramento remoto
ligeiramente
Passe princípio de funcionamento
Pilha e quadros de pilha
Java Virtual Machine Pilhas (Java Virtual Machine pilha)
Todos nós sabemos que até o heap JVM, pilha, a área de método, onde a memória de pilha é a quem usá-lo? Na verdade, threads, cada thread após o início, a máquina virtual será atribuído uma memória pilha.
- Cada pilha é uma pilha de uma pluralidade de armações (Quadro) composição, o que corresponde a cada memória método invocação ocupada
- Cada segmento pode ter apenas um quadro de pilha activa, correspondente ao método actualmente a ser executado
troca de contexto Thread (Fio Context Switch)
Porque alguns dos seguintes cpu não faz com que a execução do thread atual em favor de uma outra execução de código rosca
- Tópico fatia de tempo cpu se esgota
- Coleta de lixo
- A thread de prioridade mais alta para executar
- rosca própria chama sono, rendimento, espera, junte-se, parque, sincronizado, de bloqueio e outros métodos
Quando a mudança de contexto ocorre, o estado das necessidades segmento atual para ser salvo pelo sistema operacional, e restaurar o estado de outro segmento, Java correspondente conceito é o contador de programa (Programa Contador Register), o seu papel é o de executar uma instrução sob jvm lembrar endereço, é o privado fio
- Estado inclui um contador de programa, as informações de pilha de quadros cada máquina virtual pilha, como variáveis locais, uma pilha operando, o endereço de retorno
- Troca de contexto ocorre com freqüência afetam o desempenho
1, iniciar 与 prazo
- chamada direta
run
é executado no thread principalrun
, não iniciar novos tópicos - Use
start
é iniciar um novo tópico, uma nova linha através de execução indiretarun
de código
2, sono 与 rendimento
dormir
- sono chamada fará com que o segmento atual de correr para o estado Temporário Waiting (bloqueio)
- Outros tópicos pode usar o método de interrupção interrupção da linha é dormir, então o método sono joga
InterruptedException
- Tópico após o fim do sono não pode ser implementada imediatamente
- TimeUnit recomendado sono em vez do fio de sono para obter melhor legibilidade
produção
- Chamada irá produzir o segmento atual de Runnable Correndo em estado de prontidão, em seguida, agendar a execução de outros tópicos
- implementações específicas dependem do agendador de tarefas do sistema operacional
a prioridade do thread
- prioridade segmento será solicitado a (dica) prioridade programador programação do fio, mas é apenas um lembrete, scheduler pode ignorá-la
- Se a CPU ocupado, então fio de alta prioridade vai ficar mais fatia de tempo, mas cpu lazer, prioridade quase nenhum efeito