多线程同步讲解-synchronized

来源:互联网 发布:华迪实训基地网络设计 编辑:程序博客网 时间:2024/04/30 17:33

多线程同步,首先需要明白的是什么是多线程同步。

所谓的多线程同步,以我的理解,就是多个线程同步的去做一件事事情,用面向对象的说法就是,多个线程操作一个对象的某个方法。

而,多个线程操作多个同一个类的实例并不是多线程同步,而是,每个线程操作每个自己的实例的某个方法。


多线程同步的时候,需要用到synchornized修饰符,synchronized有两种用法

第一种:

修饰一个方法

例如:

public class Person

{

public synchronized void doSomething()

{

//

}

}

那么当多个线程同时操作同一Person的实例的doSomething()方法的时候,那么多个线程就会产生同步问题

synchronized修饰的方法,会个当前对象上锁,这时候,当多个线程执行到doSomething()的时候,先执行到该方法的线程将当前对象上锁,其他线程则不可以对当前对象进行操作


第二种:

synchronized代码块

例如

public void run()

{

  synchronized(Object)

{

//同步部分 对Object上锁,同步代码块当多个线程执行到同一个对象的synchornized代码块的时候,先到达的线程对同步代码块赏所,其他线程无法操作。

}


}


推荐使用第二种方法,因为第二种方法控制的更加细粒度化,我们可以只将发生同步的代码放到同步代码块中。而第一种方法,某一时刻,只能由一个线程执行synchornized方法,其他线程不可以访问当前对象的任何synchornized方法。因为此时我们上锁上的是当前对象而不仅仅是当前方法。

原创粉丝点击