我有以下代码:主线程如何在此线程之前运行?
public class Derived implements Runnable {
private int num;
public synchronized void setA(int num) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
System.out.println("Setting value " + Thread.currentThread().getName());
this.num = num;
}
@Override
public void run()
{
System.out.println("In run: " + Thread.currentThread().getName());
setA(20);
}
public static void main(String[] args) {
Derived obj = new Derived();
Thread t1 = new Thread(obj);
t1.start();
obj.setA(32);
}
}
此打印:
In run: Thread-0
Setting value main
Setting value Thread-0
我的问题是,如果我开始线程“T1”第一,它进入了run方法的输出显示,如何如果对象被t1锁定,主线程能够在't1'之前调用setA吗? (或者甚至在锁定'obj'main之前能够获得锁定)它只是调度程序还是我认为它错了?
除非您采取明确的步骤来同步它们,否则没有关于使用线程排序的保证。这就是整个线程的重点,它们是异步的。 –
调用此代码时,主线程已启动并正在运行。你的另一个线程只需要一点时间来构建和运行,所以我对你看到的结果并不感到惊讶。再加上@JimGarrison上面陈述的。 –
你的代码也不应该编译 - 你的Runnable没有'run()'方法。 –