Java de programação simultânea Duas Notas

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 Runnablemais fácil e pool de threads API com outros altos
  • Com Runnablesoltou 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 processo
  • taskkill Matar o processo de

linux

  • ps -fe Ver todos os processos
  • ps -fT -p <PID> Ver um processo (PID) de todos os tópicos
  • kill Matar o processo de
  • top H maiúsculo alternância rosca visor
  • top -H -p <PID> Ver um processo (PID) de todos os tópicos

Java

  • jps Comando para visualizar todos os processos Java
  • jstack <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 principal run, não iniciar novos tópicos
  • Use starté iniciar um novo tópico, uma nova linha através de execução indireta runde código
2, sono 与 rendimento

dormir

  1. sono chamada fará com que o segmento atual de correr para o estado Temporário Waiting (bloqueio)
  2. Outros tópicos pode usar o método de interrupção interrupção da linha é dormir, então o método sono joga InterruptedException
  3. Tópico após o fim do sono não pode ser implementada imediatamente
  4. TimeUnit recomendado sono em vez do fio de sono para obter melhor legibilidade

produção

  1. Chamada irá produzir o segmento atual de Runnable Correndo em estado de prontidão, em seguida, agendar a execução de outros tópicos
  2. 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
3, juntar-se métodos detalhados
4, os métodos detalhados de interrupção
Publicado 93 artigos originais · Louvor obteve 31 · vê 30000 +

Acho que você gosta

Origin blog.csdn.net/weixin_43866567/article/details/104543464
Recomendado
Clasificación