Comment résoudre : Erreur multithread Java : problème de planification des threads
Introduction :
Lorsque nous utilisons Java pour la programmation multithread, nous rencontrons souvent des problèmes de planification des threads. En raison de l'exécution simultanée de plusieurs threads, l'ordre d'exécution et le temps d'exécution entre les threads sont incertains, ce qui peut entraîner des erreurs inattendues. Cet article présentera quelques problèmes courants de planification de threads et fournira des solutions et des exemples de code.
1. Manifestations courantes des problèmes de planification des threads :
public class ThreadDemo { public static void main(String[] args) { Printer printer = new Printer(); Thread thread1 = new Thread(printer); Thread thread2 = new Thread(printer); thread1.start(); thread2.start(); } } class Printer implements Runnable { @Override public void run() { synchronized (this) { for (int i = 0; i < 5; i++) { System.out.println(Thread.currentThread().getName() + ": " + i); } } } }
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class ThreadDemo { public static void main(String[] args) { Printer printer = new Printer(); Thread thread1 = new Thread(printer); Thread thread2 = new Thread(printer); thread1.start(); thread2.start(); } } class Printer implements Runnable { private Lock lock = new ReentrantLock(); @Override public void run() { lock.lock(); try { for (int i = 0; i < 5; i++) { System.out.println(Thread.currentThread().getName() + ": " + i); } } finally { lock.unlock(); } } }
public class ThreadDemo { public static void main(String[] args) { Thread thread1 = new Thread(new Printer(), "Thread 1"); Thread thread2 = new Thread(new Printer(), "Thread 2"); thread1.setPriority(Thread.MIN_PRIORITY); // Thread.MIN_PRIORITY = 1 thread2.setPriority(Thread.MAX_PRIORITY); // Thread.MAX_PRIORITY = 10 thread1.start(); thread2.start(); } } class Printer implements Runnable { @Override public void run() { for (int i = 0; i < 5; i++) { System.out.println(Thread.currentThread().getName() + ": " + i); try { Thread.sleep(100); // 模拟耗时操作 } catch (InterruptedException e) { e.printStackTrace(); } } } }
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!