Java:在线程中执行语句

Java:在线程中执行语句,java,multithreading,Java,Multithreading,线程是否一次完全运行一条语句,或者该语句是否会被拆分 例如,在下面的陈述中: public void run() { System.out.println(aString + ": " + ++index); } 可能的执行顺序是什么?不,当线程被抢占时,没有任何保证,因此您不能假设语句将以原子方式完成。事实上,即使您的预增量++index操作也不能保证在不中断的情况下完成(原因是我们有AtomicInteger) 枚举可能的执行顺序可能没有用,因为它们会不断地从一个程序运行到另一个程

线程是否一次完全运行一条语句,或者该语句是否会被拆分

例如,在下面的陈述中:

public void run() {
    System.out.println(aString + ": " + ++index);
}

可能的执行顺序是什么?

不,当
线程
被抢占时,没有任何保证,因此您不能假设语句将以原子方式完成。事实上,即使您的预增量
++index
操作也不能保证在不中断的情况下完成(原因是我们有
AtomicInteger

枚举可能的执行顺序可能没有用,因为它们会不断地从一个程序运行到另一个程序运行(假设还有其他线程在运行)。这就是为什么我们有了s,并对多线程代码进行了一些貌似的控制

有关更多详细信息,请参阅。

中断几乎可以在指令级别的任何时间发生。例如,字符串连接将由新字符串的构造组成,这些新字符串将接受多条指令,其中任何一条指令都可能被中断。打印也将是另一条可能中断的指令

如果希望某个线程在其他线程完成操作之前执行一段代码,请查看:

已同步关键字

锁定信号量


无法保证您的代码/语句不会被其他线程中断。但您可以使用同步块-

public void run()
{
    synchronized( this ) {
       System.out.println(aString+ ": " + ++index);
    }
}

这将确保打印时没有线程试图中断另一个线程。

您的上一条语句不正确。synchronized关键字不会阻止其他线程中断当前正在执行的线程,而是会阻止尝试在同一对象或方法上执行同步方法的所有其他线程。你可以在这里查看。