web-dev-qa-db-fra.com

Java - créer un nouveau fil

Je suis nouveau dans les discussions. Je voulais créer une fonction simple travaillant séparément du thread principal. Mais cela ne semble pas fonctionner. Je voudrais juste créer un nouveau fil et y faire des choses indépendamment de ce qui se passe sur le fil principal. Ce code peut paraître bizarre, mais je n’ai pas beaucoup d’expérience avec les threads jusqu’à présent. Pourriez-vous m'expliquer ce qui ne va pas avec ça?

  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);}
          }
      };
  }
36
Matt Martin

Vous appelez la méthode one.start() dans la méthode run de votre thread. Mais la méthode run ne sera appelée que lorsqu'un thread est déjà démarré. Faites ceci à la place:

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();
82
stinepike

Vous pouvez faire comme:

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

La méthode run () est appelée par start (). Cela se fait automatiquement. Vous avez juste besoin d'appeler start (). Pour un tutoriel complet sur la création et l’appel de fils, voir mon blog http://preciselyconcise.com/Java/concurrency/a_concurrency.php

2
Sai Sunder

Si vous souhaitez créer plus de threads, dans le cas ci-dessus, vous devez répéter le code dans la méthode run ou au moins répéter l'appel d'une méthode à l'intérieur.

Essayez ceci, ce qui vous aidera à appeler autant de fois que vous le souhaitez . Il vous sera utile lorsque vous devrez exécuter votre parcours plusieurs fois et de plusieurs manières.

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

Classe principale

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

A obj2 = new A();
obj2.start();
2
Jayesh

Un moyen plus simple peut être:

new Thread(YourSampleClass).start();    
0
Mehdi

Depuis qu’une nouvelle question vient d’être fermée, vous ne devriez pas créer d’objets Thread Voici une autre façon de le faire:

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

Cependant, vous devriez probablement conserver le service d’exécuteur entre les appels.

0
daniu

S'il vous plaît essayez ceci. Vous comprendrez tout parfaitement après avoir jeté un œil sur ma solution.

Il n'y a que 2 façons de créer des threads en Java

avec implémentation Runnable

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

avec rallonge de fil

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

Votre classe principale ici

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();
}

}

0
Cristian Babarusi