java线程的静态变量共享问题

拉轰的大蜗牛 拉轰的大蜗牛 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
下面的输出结果可能是45; 90; 或 90;90 两种可能. 理论上static 静态变量不是被共享的吗? 会打印出90这个值说明static tick 变量确实是被共享的;
那么, 下面是我的分析:
出现90;90这个打印结果,是不是因为第一个线程执行完++到45,但还没来得执行System.out.println(Thread.currentThread().getName()+" : " + tick);. 第二个线程完成了++到了90, 这时候第一个线程再执行System.out.println(Thread.currentThread().getName()+" : " + tick); 就打印出90了. 然后第二个线程也当然是打印90!

最后,问题来了!!!! [cpu执行一个线程的run方法, 是不是不能保证一次性全部执行到结束!???]


package java11;

class Ticket implements Runnable //extends Thread
{
private static int tick = 0;

@Override
public void run() {

for (int i=0; i<10; i++){
tick = tick+ i;
}
System.out.println(Thread.currentThread().getName()+" : " + tick);
}
}


class TicketDemo
{
public static void main(String[] args)
{
Ticket t1 = new Ticket();
Ticket t2 = new Ticket();
Ticket t3 = new Ticket();
Ticket t4 = new Ticket();
new Thread(t1).start();
new Thread(t2).start();
}

}
...全文

相关推荐

评论 6
收藏 已收藏
分享
返回顶部
拉轰的大蜗牛
Java SE 62,620 成员 307,251 内容