Le contenu de cet article explique comment créer du multi-threading en Java ? (Détails), il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.
Un thread est une entité dans le processus et constitue l'unité de base qui est planifiée et distribuée indépendamment par le système. pas posséder de ressources système, seulement C'est une ressource indispensable pendant le fonctionnement, mais il peut partager toutes les ressources possédées par le processus avec d'autres threads appartenant au même processus
En apparence, il est multi- threading, mais en fait, le CPU se relaye pour s'exécuter rapidement
Parallèle : deux tâches sont effectuées en même temps, c'est-à-dire que pendant l'exécution de la tâche A, la tâche B s'exécute également (nécessite plusieurs cœurs)
Concurrence : les deux tâches doivent s'exécuter et le processeur ne peut accepter qu'une seule tâche, donc les deux tâches doivent être exécutées tour à tour. Étant donné que l'intervalle de temps est très court, les gens ont l'impression que les deux tâches sont en cours d'exécution
La commande Java va démarrez la jvm, ce qui équivaut à démarrer une application (un processus). Le processus démarrera automatiquement le "thread principal". Le thread principal appelle la méthode principale
Non, il est multithread. Au moins le thread de garbage collection et le thread principal seront démarrés
Cela peut être vérifié par le code suivant Le thread principal et le thread de garbage collection sont en compétition pour les ressources de chacun
public class TestThread { public static void main(String[] args) { //4.创建Thread的子类对象 MyThread myThread = new MyThread(); //5.启动线程,注意这里使用的是start而不是run方法 myThread.start(); for (int i = 0; i < 10000; i ++) { System.out.println("This is main thread"); } } } //1.继承Thread class MyThread extends Thread{ //2.重写run方法 @Override public void run() { super.run(); //3.线程方法中要执行的代码,可以根据自己的需求填写 for(int i = 0 ; i < 10000 ; i ++ ) { System.out.println("This is MyThread thread "); } } }
Pour implémenter le multi-threading, vous doit devenir une sous-classe de thread et remplacer la méthode run. Notez que lors du démarrage d’un thread, ce n’est pas la méthode run mais la méthode start qui est appelée. Si la méthode run est appelée, cela équivaut à une méthode ordinaire qui n'ouvre pas le fil
public class Thread implements Runnable
public class TestThread { public static void main(String[] args) { MyThread myThread = new MyThread(); //注意这里使用的是start而不是run方法 myThread.start(); for (int i = 0; i < 10000; i ++) { System.out.println("This is main thread"); } } } class MyThread extends Thread{ @Override public void run() { super.run(); for(int i = 0 ; i < 10000 ; i ++ ) { System.out.println("This is MyThread thread "); } } }
puis quand on démarre enfin le thread, il faut démarrer le thread via l'objet sous-classe de Thread
public class TestRunnable { public static void main(String[] args) { //4.创建Thread的子类对象 Runnable myRunnable = new MyRunnable(); //5.启动线程,创建Thread并把runnable的子类作为构造参数 new Thread(myRunnable).start(); for (int i = 0; i < 10000; i ++) { System.out.println("This is main thread"); } } } //1.实现runnable接口 class MyRunnable implements Runnable { //2.重写run方法 @Override public void run() { //3.线程方法中要执行的代码,可以根据自己的需求填写 for(int i = 0 ; i < 10000 ; i ++ ) { System.out.println("This is MyRunnable thread "); } } }
Callable
call méthode, qui est équivalente à la méthode run dans le thread. La différence est que la méthode d'appel permet aux valeurs de retour
public class CallableDemo { public static void main(String[] args) { //3.把Callable实现类对象作为构造参数传入FutureTask创建FutureTask对象。 FutureTask<UUID> futureTask = new FutureTask<UUID>(new MyCallable()); //4.把FutureTask对象作为构造参数传入Thread,并开启线程 new Thread(futureTask).start(); try { System.out.println(futureTask.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } } //1. 实现**Callable**接口 class MyCallable implements Callable<UUID> { //2.重写**call**方法,相当于thread中的run方法。不同的是call方法允许有返回值 @Override public UUID call() throws Exception { //生成随机数 return UUID.randomUUID(); } }
public void run() { if (this.target != null) { this.target.run(); }
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!