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
naquela classe tambem temos que criar um metodo run que sera executado quando a thread for iniciada
na nossa classe principal a gente instancia um objeto daquela classe
instanciamos um objeto do tipos Thread passando como argumento o objeto que vamos usar como a thread
agora podemos iniciar ela com o metodo 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
podemos criar quantas threads a gente quiser
outra forma de usar thread seria herdar a classe Thread
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
- 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