1. Définissez une classe qui hérite de la classe Thread, remplace la méthode run dans la classe, appelle la méthode start de l'objet de classe, la méthode start démarre le thread et appelle la méthode run. La classe Thread est utilisée pour décrire les threads ; cette classe définit une fonction exécutée, qui est utilisée pour stocker le code à exécuter par le thread.
2. Définissez une classe pour implémenter l'interface Runnable, remplacez les méthodes de l'interface Runnable, créez un objet thread via la classe Thread, transmettez l'objet de sous-classe de l'interface Runnable en tant que paramètre réel au constructeur de la classe Thread et appelez la méthode start de la classe Thread pour démarrer le thread. La méthode run dans la sous-classe de l'interface Runnable sera appelée ;
La manière d'implémenter l'interface Runnable évite les limitations causées par l'héritage unique ;
Fil T ;
T.setMaemon(true);//Définir le thread comme thread d'arrière-plan ; le thread d'arrière-plan se termine automatiquement lorsque tous les threads de premier plan se terminent ;
T.notify();//Réveillez ce fil ;
T.notifyAll();//Réveiller tous les threads ;
T.interrupt();//Interruption du thread ;
Thread.sleep(100);//Mettre le fil en pause pendant 100 millisecondes
synchronisé : par défaut, il se verrouille tout seul, et les objets personnalisés peuvent également être verrouillés ;
Il doit y avoir deux threads ou plus en cours d'exécution. Plusieurs threads doivent utiliser le même verrou. Il faut s'assurer qu'un seul thread est en cours d'exécution pendant le processus de synchronisation.
Déterminer la synchronisation : clarifier quels codes nécessitent une exécution multithread, clarifier les données partagées et clarifier quelles instructions dans le code d'exécution multithread fonctionnent sur des données partagées ;
classe Tickets implémente Runnable
{
tick int privé = 100 ;
public void run() { // public synchronisé void run()
while (cocher > 0) {
synchronisé (ce) {
si (cocher > 0) {
essayer {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(this.toString() + "vente :" + tick--);
}
}
}
}
Comme ci-dessus : les ticks sont des données partagées. Pour faire fonctionner les ticks, vous devez fonctionner de manière synchronisée. Ce sont les tickets eux-mêmes ;
Mécanisme de réveil en attente : lors de l'exploitation des threads de synchronisation, ils doivent identifier les verrous détenus par les threads qu'ils exploitent. Seuls les threads en attente sur le même verrou peuvent être réveillés par notification sur le même verrou. Le thread en cours de réveil. ; (c'est-à-dire : attendre et se réveiller doivent être le même verrou)