Java并发访问

2020-04-19  本文已影响0人  极客天空

1 线程安全

线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据

2 局部变量并不会数据共享

局部变量,不同线程的并不共享,所以并不会发生覆盖

PrivateNum p=new PrivateNum();
        MyThread threadA=new MyThread('A',p);
        MyThread threadB=new MyThread('B',p);
        threadA.start();
        threadB.start();

public void test( char i) {
 
            try {
             int num=0;
             - - - - - - -
            }
         catch (InterruptedException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }}

3 实例成员变量数据共享

PrivateNum p=new PrivateNum();
        MyThread threadA=new MyThread('A',p);
        MyThread threadB=new MyThread('B',p);
        threadA.start();
        threadB.start();
public void test( char i) {
            int num=0;
            try {
             - - - - - - -
            }
         catch (InterruptedException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }}

线程AB访问的是同一个变量(指向同一个地址),所以这个时候会发生覆盖,同时这里出现了线程安全问题

4 synchronized关键字可以避免线程安全问题

5 多个线程访问的是两个不同实例的同一个同步方法

public static void main(String[] args) {
        PrivateNum p1=new PrivateNum();
        PrivateNum p2=new PrivateNum();
        MyThread threadA=new MyThread('A',p1);
        MyThread threadB=new MyThread('B',p2);
        threadA.start();
        threadB.start();
    }}

这是因为这里是两个锁,创建了p1和p2对象,创建的是两个锁,锁对象不同不造成互斥作用

6 多线程调用同一个实例的两个不同(一个同步,一个非同步)方法

MyThread threadA=new MyThread('A',p1);
        MyThread2 threadB=new MyThread2('B',p1);
        threadA.start();
        threadB.start();

线程B可以异步调用非同步的方法

7 死锁

线程AB开始执行时,因为锁不同,所以不互斥,A当执行到另一个同步代码块(锁2)的时候,由于这个时候锁给线程B占有了,所以只能等待,同样B线程也是如此,AB互相抢对方的锁,但是所以造成了死锁

8 总结

volitate增加了实例变量在对个线程之间的可见性,保证我们获得的是变量的最新值。
volatile在读上面保持了同步作用,但是在写上面不保持同步
synchronized的同步作用不仅保证了对同一个锁线程的互斥,还保证了数据的同步
volatile对比synchronized
两者修饰的不同,volatile修饰的是变量,synchronized修饰的是方法和代码块
两者的功能不同。volatile保证数据的可见性,synchronized是线程同步执行(间接保证数据可见性,让线程工作内存的变量和公共内存的同步)
volatile性能比synchronized性能高

上一篇 下一篇

猜你喜欢

热点阅读