求教 关于多线程非同步时对统一对象的操作

w1054320853 2017-08-03 09:49:30
public class X implements Runnable
{
private int x,y;
public static void main(String[] args){
X that = new X();
(new Thread(that)).start();
(new Thread(that)).start();
}
public void run(){

for(;;)
{
x++;
y++;
System.out.println("x="+x+",y="+y);
}

}
}


为什么这个输出是这样的


关于这个输出我有两个疑惑,为什么这个不是同步的,但是却有线程安全的样子,同一行的xy居然都相等!
还有一个就是为什么输出会有重复 两个2 和两个都等于4
...全文
225 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
public class X implements Runnable {
	private int x, y;

	public static void main(String[] args) {
		X that = new X();
		(new Thread(that)).start();
		(new Thread(that)).start();
	}

	public void run() {

		for (;;) {
			x++;
			y++;
			if(x != y){
				System.out.println("x:" + x + ":y" + y);
				break;
			}
		}

	}
}
这样运行一下更神奇
福来哥 2017-08-04
  • 打赏
  • 举报
回复
这个和操作系统有关的,每个线程获得的CPU时间不同的。某个线程获得的cpu时间多一点就可能连续输出了。
qq_26790435 2017-08-04
  • 打赏
  • 举报
回复
并未对代码块进行同步,什么时候执行什么线程由底层操作系统或CPU说了算

51,410

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧