public class suspendCheck extends Thread{
int t ;
public static void main(String args[]) throws InterruptedException {
suspendCheck as = new suspendCheck();
Thread t2 = new Thread(as);
t2.start();
Thread t3 = new Thread(as);
t3.start(); }
public void run(){
if(t==0){
System.out.println("JAVA Develper");
t= ++t;
}
else{
System.out.println("JAVA Test");
}
}
}
Run Code Online (Sandbox Code Playgroud)
多次运行此程序后,存在差异和差异:
通常:
JAVA Develper
JAVA Develper
Run Code Online (Sandbox Code Playgroud)
并偶尔:
JAVA Develper
JAVA Test
Run Code Online (Sandbox Code Playgroud)
我对此感到震惊.我哪里做错了?
是的,这是可以接受的.这里唯一可怕的事情是你试图使用线程而不知道它们的局限性.
您可以使用一个线程轻松完成此操作.你可以在这里采取安全的道路.
线程不保证有关优化和排序的任何内容.如果你真的希望你的int正确改变,那就做吧volatile和/或使用AtomicInteger.如果你想要更好的控制使用锁和/或synchronized块.
在这种情况下,只需声明t为volatile并在访问t或AtomicInteger 周围进行同步,并使用该类的方法进行访问t.
为了将来参考,在没有阅读所有相关警告的情况下尝试这些事情可能导致死亡,窒息,发冷,发烧,溺水,感染,恶心以及无法控制昂贵的机器.
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |