Maison  >  Article  >  Java  >  Exemple d'analyse de la façon dont Java crée des threads

Exemple d'analyse de la façon dont Java crée des threads

PHPz
PHPzavant
2023-05-13 16:52:061068parcourir

Héritez Thread, utilisez ici la classe interne anonyme

@Slf4j(topic = "c.Test1")
public class Test1 {
    public static void main(String[] args) {
        //创建线程对象
        Thread t = new Thread(){
            @Override
            public void run() {
                //要执行的任务
                log.debug("running");
            }
        };
        //设置线程的名字
        t.setName("t1");
        //启动线程
        t.start();
        log.debug("running");
    }
}
/*
19:44:31.998 [main] DEBUG c.Test1 - running
19:44:31.998 [t1] DEBUG c.Test1 - running
*/

pour implémenter l'interface Runnable et coopérez avec la classe Thread. Utilisez également la classe interne anonyme

  • pour séparer les threads et les tâches

  • Thread représente les threads

  • .
  • Runnable représente une tâche exécutable

@Slf4j(topic = "c.Test2")
public class Test2 {
    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                //要执行的任务
                log.debug("running");
            }
        };
        //创建线程对象
        Thread t = new Thread(runnable, "t2");
        //启动线程
        t.start();
    }
}
//19:52:27.646 [t2] DEBUG c.Test2 - running

En javajava, l'annotation @FunctionalInterface@FunctionalInterface signifie que l'interface n'a qu'une seule méthode abstraite, qui peut être simplifiée par l'expression lambdalambda

@Slf4j(topic = "c.Test2")
public class Test2 {
    public static void main(String[] args) {
        Runnable runnable = () -> {
            //要执行的任务
            log.debug("running");
        };
        //创建线程对象
        Thread t = new Thread(runnable, "t2");
        //启动线程
        t.start();
    }
}

FutureTask coopère avec Thread

car FutureTask peut s'interfacer a Paramètres de type appelable, utilisés pour gérer les situations où il y a une valeur de retour

@Slf4j(topic = "c.Test3")
public class Test3 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //创建任务对象
        FutureTask<Integer> task = new FutureTask<>(() -> {
            log.debug("running");
            Thread.sleep(1000);
            return 100;
        });
        /*
        用lambda化简前
         */
        FutureTask<Integer> task1 = new FutureTask<>(new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                log.debug("running");
                Thread.sleep(1000);
                return 100;
            }
        });
        //参数1是任务的对象, 参数2是线程的名字
        Thread t = new Thread(task, "t3");
        t.run();
        //主线程堵塞,同步等待task执行完毕的结果
        Integer integer = task.get();
        log.debug("结果是:{}", integer);
    }
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer