如果我有一个同步方法并且两个线程正在等待进入它,它们似乎进入了后进先执行的线程。有没有办法让这个先入先出?
这是我正在使用的单元测试:
package com.test.thread;
import org.apache.log4j.Logger;
import org.junit.Test;
public class ThreadTest {
private static final Logger log = Logger.getLogger(ThreadTest.class);
@Test
public void testThreading() throws InterruptedException {
Thread t1 = new Thread(new Runnable() {
public void run() { synchd("1"); }
});
Thread t2 = new Thread(new Runnable() {
public void run() { synchd("2"); }
});
Thread t3 = new Thread(new Runnable() {
public void run() { synchd("3"); }
});
t3.start();
Thread.sleep(5);
t1.start();
t2.start();
Thread.sleep(12000);
}
public static synchronized void synchd(String output) {
log.debug(output);
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// do nothing
}
}
}
此输出始终为 3、2、1,我想找到一种方法使其成为 3、1、2。
最佳答案
不,它们不是按照到达的顺序执行的。
执行顺序取决于与线程调度相关的许多参数,并且通常是不可预测的。
关于java - 如果两个线程正在等待进入一个同步方法,当互斥量被释放时,它们是否按照它们到达的顺序执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6961834/