Vilarejo PK2P
Bem-vindo ao fórum Vilarejo PK2P! O fórum oficial do canal Press Key to Play do Youtube!

Grupo para reunir as pessoas que acompanham os vídeos no canal Press Key to Play e discutir os assuntos abrangidos pelo Blog PK2P.


Você não está conectado. Conecte-se ou registre-se

[tutorial] threads em java

Ver o tópico anterior Ver o tópico seguinte Ir em baixo  Mensagem [Página 1 de 1]

1 [tutorial] threads em java em 22/10/2017, 06:57

e ae galera blz? nesse tutorial vamos aprender como criar threads em java a pedido do Lucas_Gamer13. uma thread seria um forma de executar trechos do codigo de forma paralela naquele programa, isso evita do programa ficar preso em um determinado  loop e ter que esperar terminar para conseguir executar aquele outro trecho de codigo, threads seria como ter um subprocesso do mesmo porem, compartilhando o mesmo trecho de memoria daquele programa. uma das formas de criar threads em java seria criar uma classe que vamos rodar em paralelo, nessa classe temos que implementar a interface Runnable

Código:
class NovaThread implements Runnable{
}

public class Principal {
    public static void main(String[] args) {
    }
}

naquela classe tambem temos que criar um metodo run que sera executado quando a thread for iniciada

Código:
class NovaThread implements Runnable{
    public void run(){
    }
}

public class Principal {
    public static void main(String[] args) {
    }
}

na nossa classe principal a gente instancia um objeto daquela classe


Código:
class NovaThread implements Runnable{
    public void run(){
    }
}

public class Principal {
    public static void main(String[] args) {
 NovaThread nova = new NovaThread();
    }
}

instanciamos um objeto do tipos Thread passando como argumento o objeto que vamos usar como a thread

Código:
class NovaThread implements Runnable{
    public void run(){
    }
}

public class Principal {
    public static void main(String[] args) {
 NovaThread nova = new NovaThread();
 Thread minhathread = new Thread(nova);
    }
}

agora podemos iniciar ela com o metodo start

Código:
class NovaThread implements Runnable{
    public void run(){
    }
}

public class Principal {
    public static void main(String[] args) {
 NovaThread nova = new NovaThread();
 Thread minhathread = new Thread(nova);
 minhathread.start();
    }
}

no exemplo anterior tanto a minha classe principal quanto a minha classe NovaThread estara rodando de forma paralela ao mesmo tempo. para mostrar isso vou prender as duas classes em um loop infinito e ter uma saida

Código:
class NovaThread implements Runnable{
    public void run(){
 while(true){
    System.out.println("kami");
 }
    }
}

public class Principal {
    public static void main(String[] args) {
 NovaThread nova = new NovaThread();
 Thread minhathread = new Thread(nova);
 minhathread.start();
 
 while(true){
    System.out.println("kodo");
 }
    }
}



podemos criar quantas threads a gente quiser

Código:
class NovaThread implements Runnable{
    public void run(){
 while(true){
    System.out.println("kami");
 }
    }
}

class OutraThread implements Runnable{
    public void run(){
 while(true){
    System.out.println("nova thread");
 }
    }
}

public class Principal {
    public static void main(String[] args) {
 NovaThread nova = new NovaThread();
 OutraThread outra = new OutraThread();
 
 Thread minhathread = new Thread(nova);
 Thread minhathread2 = new Thread(outra);
 
 minhathread.start();
 minhathread2.start();
 
 while(true){
    System.out.println("kodo");
 }
    }
}

outra forma de usar thread seria herdar a classe Thread

Código:
class NovaThread extends Thread{
    public void run(){
 while(true){
    System.out.println("kami");
 }
    }
}

public class Principal {
    public static void main(String[] args) {
 NovaThread nova = new NovaThread();
 Thread minhathread = new Thread(nova);
 minhathread.start();
 
 while(true){
    System.out.println("kodo");
 }
    }
}

um dos problemas em usar threads no programa seria os exemplos anteriores, onde não sera exibido sequencialmente a saida e sim existe a possibilidade de uma ou outra saida ser exibida naquele momento, embora ambas esteja sendo executadas ao mesmo tempo so podemos ter uma unica saida. outro problema que pode surgir por causa do uso das threads é uma vuln chamada de race condition onde tentamos modificar um determinado estado de forma paralela que depende do valor atual do proprio estado sendo que o valor atual vai ser o mesmo em ambos, um exemplo seria uma variavel global onde incrementamos ela usando duas threads, se ambas as threads acabar lendo o valor atual ao mesmo tempo exemplo o valor 0 então ambas as threads tera o valor 0 para ser incrementado, depois de incrementar esse valor e armazenar ele na variavel o resultado final naquela variavel sera o numero 1 e nao o 2 como deveria ser. existem meios de contornar esses problemas de sincronização como mutex, semaforos e filas.

by kodo no kami

Ver perfil do usuário https://eofclub.in/forum

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo  Mensagem [Página 1 de 1]

Permissão deste fórum:
Você não pode responder aos tópicos neste fórum