一个线程是否一次完全运行一个语句,或者该语句可能会被拆分?
例如,在下面的声明中:
public void run() {
System.out.println(aString + ": " + ++index);
}
可能的执行顺序是什么?
一个线程是否一次完全运行一个语句,或者该语句可能会被拆分?
例如,在下面的声明中:
public void run() {
System.out.println(aString + ": " + ++index);
}
可能的执行顺序是什么?
无法保证您的代码/语句不会被另一个线程中断。但是您可以使用同步块 -
public void run()
{
synchronized( this ) {
System.out.println(aString+ ": " + ++index);
}
}
这将确保没有线程在打印时尝试中断另一个线程。
中断几乎可以在指令级的任何时间发生。例如,字符串连接将包含新字符串的构造,这些构造将采用多条指令,其中任何一条都可能被中断。打印也将是另一个可能被中断的指令。
如果您想让一个线程在其他线程完成操作之前执行一段代码,请查看:
同步关键字http://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html _
或锁和信号量
http://docs.oracle.com/javase/tutorial/essential/concurrency/newlocks.html
http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Semaphore .html