Ref*_*ack 1 java multithreading
以下是OCJP考试的代码
class Test implements Runnable{
synchronized void hit(long n) {
for(int i = 1; i < 3; i++)
System.out.print(n + "-" + i + " ");
}
public static void main(String... args) throws Exception{
new Thread(new Test()).start();
new Thread(new Test()).start();
}
@Override
public void run() {
hit(Thread.currentThread().getId());
}
}
Run Code Online (Sandbox Code Playgroud)
答案:8-1 7-1 7-2 8-2和
8-1 8-2 7-1 7-2
如何预测这个输出?
你无法预测它.线程并行运行,输出顺序在线程之间有效随机,尽管顺序在每个单独的线程上都是确定的.
同步on hit()也没有任何作用,因为每个线程都有自己的Test对象,因此只与自身同步.
换句话说,8-2总是会跟随8-1.7-2将始终遵循7-1,但所有7s的顺序与所有8s的顺序完全分开.这意味着给定一组可能的输出,你可以说有些是不可能的,有些是可能的,你无法预测会产生什么样的实际输出.
您还应该阅读这个问题及其答案,这个主题非常有用:
| 归档时间: |
|
| 查看次数: |
182 次 |
| 最近记录: |