Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有强制线程上下文切换的方法,特别是在诸如++;?_Java - Fatal编程技术网

Java 是否有强制线程上下文切换的方法,特别是在诸如++;?

Java 是否有强制线程上下文切换的方法,特别是在诸如++;?,java,Java,我想知道有没有办法强制执行线程上下文切换?睡觉,屈服?有什么建议吗?需要做一些测试。特别是,我们可以在++操作中强制进行上下文切换吗?Thread.yield()不一定保证切换会发生(在实践中,至少,如果当时没有任何东西等待运行,这就是noop)。sleep()几乎可以保证这一点,但无法在++操作中实现,因为无法覆盖默认实现。你到底想让什么发生?在之前或之后进行切换就足够了吗?你能通过使用你最喜欢的IDE设置一个“手表”来模拟你正在做的事情吗?你可以尝试替换它 a++; 与 你能就你想做的事情

我想知道有没有办法强制执行线程上下文切换?睡觉,屈服?有什么建议吗?需要做一些测试。特别是,我们可以在++操作中强制进行上下文切换吗?

Thread.yield()不一定保证切换会发生(在实践中,至少,如果当时没有任何东西等待运行,这就是noop)。sleep()几乎可以保证这一点,但无法在++操作中实现,因为无法覆盖默认实现。你到底想让什么发生?在之前或之后进行切换就足够了吗?你能通过使用你最喜欢的IDE设置一个“手表”来模拟你正在做的事情吗?

你可以尝试替换它

a++;


你能就你想做的事情提供更多的背景吗?根据规范,上下文切换不应该影响行为(只有在过度切换时才会影响性能)@Bohemian:我猜OP是在试图模拟一种竞争条件,以显示代码如何失败或验证代码是否失败。@Bohemian:在同步性差的多线程应用程序中,上下文切换肯定会影响行为。假设100个线程执行i=f(i),其中f(i)=i。你的答案可以是1-100,这取决于线程的交错方式。@James-Huh?我所说的“上下文切换不应该影响行为”是指“代码应该正确编写,这样无论发生多少上下文切换,它都能正常工作”。此外,规范中没有要求线程切换的内容。。。理论上,它可能永远不会被切换(尽管在实践中会)
int tmp = a;
Thread.sleep(1);
a = tmp + 1;