多线程基础研究

作者: SimpleWater | 来源:发表于2018-04-10 00:56 被阅读0次

    1.synchronized

    当多个线程访问run方法,以排队的方式进行(这里的排队是按照cpu分配的顺序)

    一个线程想要执行synchronize修饰的方法里面的代码:

        1.尝试获得锁

        2.如果拿到锁,执行同步区内的代码,否则一直尝试去拿锁

    多线程竞争锁

    2.多个线程多个锁

    非静态方法一个对象一把锁

    静态方法前面的synchronized锁的是Class而不是对象

    synchronized取得的锁都是对象锁。而不是把一段代码当做锁。

    有一种情况则是相同的锁,即在静态方法上面加syn关键字,表示锁定的是class类

    3.对象锁的同步和异步

    同步的概念就是共享,如果不是共享的资源就没必要同步

    同步的目的为了线程安全:

            原子性

            可见性

    两个线程,一个调用对象的同步方法,一个调用对象的非同步方法

    * t1线程先持有object对象的lock锁,t2线程可以以异步的方式调用对象的非同步方法

    * t1线程先持有object对象的lock锁,t2线程如果要调用对象的同步方法则需要等待

    4.锁重入

    (1)同一个对象多个同步方法互相调用

    一个线程获得对象锁之后,可以继续获得该对象其他同步方法的同步锁

    (2)父子类同步方法调用

    子类可以获取父类的同步锁

    5.线程执行异常

    为了避免线程继续执行导致的各种不一致问题,需要及时退出线程

    throw RuntimeException();

    6.常量锁

    (1).最好不要用常量锁,因为会导致死锁,常量在栈中是同一把锁

    (2)字符串类锁,最好不要修改锁的值,否则会出现锁修改导致不同步

    (3)对象锁,修改对象中的某个属性的值,不会引发对象锁更改

    相关文章

      网友评论

        本文标题:多线程基础研究

        本文链接:https://www.haomeiwen.com/subject/vggwhftx.html