多线程-同步

1.线程的内存
java程序在开始运行以后,java虚拟机会为所有的线程分配一个统一的内存区域(main memory:主内存)用于存储共享数据,然后之后又为每一个新创建的线程创建一个私有的内存区域(working memory ),用于存储线程私有数据。

2.我的理解,对于可引起多线程问题的共享数据,即某个类的类属性,对于方法内部的局部变量是不会引起多线程问题的。

认识几个关键字
1.synchronized:
修饰方法:代表同步使用时需要获取到当前对象的锁;
修饰static方法:代表锁定当前类的class对象;
synchronized(this):代表获取到当前对象的锁才能运行;
syncronized(非this obj):代表需要获取obj的锁才能运行;

2.volatile关键字: 实现一个共享变量在各个线程的私有内存区域可见。原理就是在每次要使用这个变量的时候都是先从共享内存里面读,然后用(直接用或者是改变它的值),然后将用完以后的值写会共享内存区域

3.原子类实现的共享数据在各内存之间的可见性,它的原理和volatile差不多。

4.当一个同步方法单独运行的时候可能就会没错,但是在同步方法之间就会出现多线程问题。最常见的就是System.out.prinln()(他就是同步方法)
同理两个原子操作直接就形成了非原子操作,也会出现多线程的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值