java 多线程个人心得

java 多线程个人心得

看一段代码,想想打印顺序结果有多少种?

public class Test {
    private static int x = 0;
    public static void main(String[] args) throws InterruptedException {
        new Thread(() -> {
            System.out.println("线程A启动");
            x++;
            System.out.println("线程A修改x为:" + x);
        }).start();
        
        new Thread(() -> {
            System.out.println("线程B启动");
            x++;
            System.out.println("线程B修改x为:" + x);
        }).start();
        
        System.out.println("main 结束" );
    }
}

关于多线程的运行,先搞清楚这几点:

  • 1、一个线程内的程序即run方法的程序是顺序执行的 =》 程序下面的变量的值肯定时上面的程序运行的结果
  • 2、 多个线程运行时,它们的程序是交错执行的,即你可能执行n步后,我接着再执行n步,这就是多线程的魅力,也是多线程造成共享变量的数据不一致的原因,还有一个原因是 共享变量的可见性,即修改一个共享变量的值,但未使其它线程看到 ;
  • 3、程序的拆分:在单线程中,很多人会将 多步操作 看成 一步性 操作 ,比如 i++,在多线程中,这是不行的,应为你永远不知道他会在哪一步丢失cpu运行权,例如i++,完成这个操作,包括三步,取加存,它会在三个地方丢失cpu运行权 ,所以,解读程序时一定要看清程序到底操作几步;

现在我们再看一下上面的程序打印顺序共有多少种结果:34321=72种

x的结果会有多少种:2种,1和2

x的打印结果会有多少种:4种,A-1:B-1 、A-1:B-2、A-2:B-1、A-2:B-2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值