해결 방법: Java 멀티스레딩 오류: 스레드 예약 문제
소개:
멀티 스레드 프로그래밍에 Java를 사용할 때 스레드 예약 문제가 자주 발생합니다. 여러 스레드가 동시에 실행되기 때문에 스레드 간의 실행 순서와 실행 시간이 불확실하여 예상치 못한 오류가 발생할 수 있습니다. 이 기사에서는 몇 가지 일반적인 스레드 스케줄링 문제를 소개하고 솔루션과 샘플 코드를 제공합니다.
1. 스레드 스케줄링 문제의 일반적인 증상:
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(); } } } }
위 내용은 수정 방법: Java 멀티스레딩 오류: 스레드 예약 문제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!