Java – een nieuwe thread maken

Ik ben nieuw in discussies. Ik wilde een eenvoudige functie maken die los van de hoofdthread werkte. Maar het lijkt niet te werken. Ik zou gewoon een nieuwe thread willen maken en daar wat dingen doen, onafhankelijk van wat er in de hoofdthread gebeurt. Deze code ziet er misschien raar uit, maar ik heb tot nu toe niet veel ervaring met threading. Kun je me uitleggen wat hier mis mee is?

 public static void main(String args[]){
      test z=new test();
      z.setBackground(Color.white);
      frame=new JFrame();
      frame.setSize(500,500);
      frame.add(z);
      frame.addKeyListener(z);
      frame.setVisible(true);
      one=new Thread(){
          public void run() {
              one.start();
              try{
                  System.out.println("Does it work?");
                  Thread.sleep(1000);
                  System.out.println("Nope, it doesnt...again.");
              } catch(InterruptedException v){System.out.println(v);}
          }
      };
  }

Antwoord 1, autoriteit 100%

Je roept de one.start()methode aan in de runmethode van je Thread. Maar de methode runwordt alleen aangeroepen als er al een thread is gestart. Doe dit in plaats daarvan:

one = new Thread() {
    public void run() {
        try {
            System.out.println("Does it work?");
            Thread.sleep(1000);
            System.out.println("Nope, it doesnt...again.");
        } catch(InterruptedException v) {
            System.out.println(v);
        }
    }  
};
one.start();

Antwoord 2, autoriteit 24%

Je kunt het volgende doen:

   Thread t1 = new Thread(new Runnable() {
    public void run()
    {
         // code goes here.
    }});  
    t1.start();

Antwoord 3, autoriteit 12%

Het doel was om code te schrijven om start() en join() op één plek aan te roepen.
Parameter anonieme klasse is een anonieme functie. new Thread(() ->{})

new Thread(() ->{
        System.out.println("Does it work?");
        Thread.sleep(1000);
        System.out.println("Nope, it doesnt...again.");       
}){{start();}}.join();

In de body van een anonieme klasse heeft een instantieblok dat start() aanroept.
Het resultaat is een nieuwe instantie van de klasse Thread, die join() wordt genoemd.


Antwoord 4, autoriteit 7%

Je moet twee dingen doen:

  • Start de discussie
  • Wacht tot de draad klaar is (sterven) voordat je verder gaat

ie

one.start();
one.join();

Als je het niet start()doet, gebeurt er niets – het makenvan een thread voert het niet uit.

>

Als je niet join), kan je hoofdthread eindigen en afsluiten en het hele programma afsluiten voordatde andere thread is gepland om te worden uitgevoerd. Het is onbepaald of het werkt of niet als je er niet aan deelneemt. De nieuwe thread kan meestal worden uitgevoerd, maar kan soms ook niet worden uitgevoerd. Beter om zeker te zijn.


Antwoord 5, autoriteit 2%

Als je wilt dat er meer threads worden gemaakt, moet je in het bovenstaande geval de code binnen de run-methode herhalen of op zijn minst een of andere methode binnenin herhalen.

Probeer dit, zodat u zo vaak kunt bellen als nodig is.
Het is handig wanneer u uw hardloopsessie meer dan eens en vanaf veel plaatsen moet uitvoeren.

class A extends Thread {
    public void run() {
             //Code you want to get executed seperately then main thread.       
    }
     }

Hoofdles

A obj1 = new A();
obj1.start();
A obj2 = new A();
obj2.start();

Antwoord 6, autoriteit 2%

run()methode wordt aangeroepen door start(). Dat gebeurt automatisch. Je hoeft alleen maar start()aan te roepen. Zie mijn blog http://preciselyconcise.com/java/concurrency voor een volledige tutorial over het maken en aanroepen van threads /a_concurrency.php


Antwoord 7, autoriteit 2%

Omdat er zojuist een nieuwe vraag is gesloten, moet u zelf geen Thread-objecten maken. Hier is een andere manier om het te doen:

public void method() {
    Executors.newSingleThreadExecutor().submit(() -> {
        // yourCode
    });
}

U moet echter waarschijnlijk de executeur-service behouden tussen oproepen.


Antwoord 8, autoriteit 2%

Er zijn verschillende manieren om een ​​discussielijn te maken

  1. door de Threadclass >5
  2. . uit te breiden

  3. door de Uitvoerbareinterface te implementeren – > 5
  4. door gebruik te maken van ExecutorServiceinterface – >=8

Antwoord 9

Een eenvoudigere manier kan zijn:

new Thread(YourSampleClass).start();    

Antwoord 10

Probeer dit eens. Je zult alles perfect begrijpen nadat je mijn oplossing hebt bekeken.

Er zijn maar 2 manieren om discussielijnen te maken in Java

met werktuigen Runnable

class One implements Runnable {
@Override
public void run() {
    System.out.println("Running thread 1 ... ");
}

met verlengt draad

class Two extends Thread {
@Override
public void run() {
    System.out.println("Running thread 2 ... ");
}

Uw HOOFDles hier

public class ExampleMain {
public static void main(String[] args) {
    One demo1 = new One();
    Thread t1 = new Thread(demo1);
    t1.start();
    Two demo2 = new Two();
    Thread t2 = new Thread(demo2);
    t2.start();
}

}

Other episodes