多线程-同步

来源:互联网 发布:visio 数据建模 编辑:程序博客网 时间:2024/04/27 22:34

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()(他就是同步方法)
同理两个原子操作直接就形成了非原子操作,也会出现多线程的问题。

0 0
原创粉丝点击