Implemente multithreading herdando a classe Thead:
Vantagens: Simples de escrever. Se você precisar acessar o thread atual, basta usar isso em vez de usar o método Thead.currentThread().
Desvantagem: como esta classe de thread herdou a classe Thead, ela não pode herdar outras classes.
Código de exemplo:
Copie o código do código da seguinte forma:
pacoteorg.frzh.thread;
classe pública FirstThread estende Thread{
privado int i;
//Reescreva o método run. O corpo do método run é o corpo de execução do thread.
execução void pública() {
para (; eu < 100; eu++) {
//Quando a classe thread herda a classe Thread, você pode chamar diretamente o método getName para obter o nome do thread atual.
//Se você deseja obter o thread atual, use-o diretamente
//O método getName do objeto Thread retorna o nome do thread atual
System.out.println(getNome() + " " + i);
}
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
//Chama o método currentThread do Thead para obter o thread atual
System.out.println(Thread.currentThread().getName() + " " +i);
se (eu == 20) {
new FirstThread().start();
new FirstThread().start();
}
}
}
}
Executando o snippet de resultado:
Descobrimos que os valores de i nos dois subthreads não são contínuos, o que parece inconsistente com o que dissemos sobre o compartilhamento direto de dados pelos subthreads. Na verdade, aqui instanciamos dois subthreads, cada um com sua própria variável de instância i.
Usando multithreading que implementa a interface Runable:
Vantagens: A classe thread implementa apenas a interface Runable, portanto também pode herdar outras classes;
Neste caso, vários threads podem compartilhar um objeto de destino, por isso é muito adequado que vários threads processem o mesmo recurso, para que a CPU, o código e os dados possam ser separados para formar um modelo claro e melhor reflexão orientada a objetos. .
Desvantagens: A programação é um pouco complicada. Se quiser acessar o thread atual, você deve usar o método Thread.currentThread.
Código de exemplo:
Copie o código do código da seguinte forma:
pacoteorg.frzh.thread;
classe pública SecondThread implementa Runnable{
privado int i;
@Substituir
execução void pública() {
// TODO stub de método gerado automaticamente
para (; eu < 100; eu++) {
System.out.println(Thread.currentThread().getName() + " " + i);
}
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName() + " " + i);
se (eu == 20) {
SecondThread st = new SecondThread();
new Thread(st, "thread filho 1").start();
new Thread(st, "thread filho 2").start();
}
}
}
}
Executando o snippet de resultado:
Pode-se observar que o valor i neste momento muda continuamente porque os threads 1 e 2 compartilham o mesmo destino.