`

同一个线程synchronized方法调用synchronized方法

 
阅读更多

一个线程里面有两个synchronized方法a(),b().

假如在a()里面调用b(),会发生什么情况?这样

public synchronized void a(){
    ...
    b()
    ...
}

public synchronized void b(){
    ...
}

 a()会被hang住吗?

 

分享到:
评论
1 楼 tojaoomy 2013-02-21  
A synchronized area (by which we mean a synchronized block or method) does not blindly grab the
lock when it enters the code section and free the lock when it exits. If the current thread already owns
the object lock, there is no reason to wait for the lock to be freed or even to grab the lock. Instead the
code in the synchronized area merely executes. Furthermore, the system is smart enough not to free
the lock if it did not initially grab it upon entering the synchronized area.

相关推荐

    线程及方法调用

    当创建一个Thread的子类并重写`run()`方法时,`run()`方法内部的代码定义了线程的行为。在`main`方法中创建子类实例并调用`start()`方法启动线程。例如: ```java public class MyThread extends Thread { @...

    java的线程同步机制synchronized关键字的理解_.docx

    synchronized 方法的缺陷是:同一个对象的不同线程之间会形成互斥,而对这个对象所属的 Class 所产生的另一对象却可以任意调用这个被加了 synchronized 关键字的方法。 synchronized 块 除了方法前用 synchronized...

    Java 线程同步调用

    当一个线程正在执行这个方法时,其他试图访问同一对象实例上任何同步方法的线程将被阻塞,直到当前线程释放锁。 同步方法的语法简单明了: ```java public synchronized void methodName() { // 方法体 } ``` ###...

    Java多线程实现异步调用实例

    异步调用是在多线程环境中实现的,其中一个线程(通常是主线程)发起一个请求,然后立即返回,无需等待该请求的结果。这使得调用者可以继续执行其他任务,而不会被阻塞。在Java中,`Future`和`ExecutorService`可以...

    Java多线程synchronized同步方法详解

    这意味着如果一个线程已经获取了某个对象的锁,并正在执行该对象的`synchronized`方法,其他试图访问同样对象的`synchronized`方法的线程将会被阻塞,直到当前线程完成该方法的执行并释放锁。 - 如果A线程持有了`...

    使用synchronized实现多线程同步.pdf

    1. 对于类的实例方法,如果一个线程正在执行某对象的`synchronized`实例方法,其他线程不能通过同一个对象调用该方法,但可以通过其他对象实例调用。 2. 类的静态方法被`synchronized`修饰时,它会锁定类的Class对象...

    Java使用synchronized修饰方法来同步线程的实例演示

    当一个线程进入synchronized代码块或方法时,它会获取与该代码块或方法关联的对象锁。其他尝试进入相同代码块或方法的线程将被阻塞,直到当前线程执行完毕并释放锁。这样可以确保在任何给定时刻,只有一个线程能够...

    Java多线程synchronized关键字详解(六)共5

    `synchronized`具备可重入性,即一个线程已经获得了某个对象的锁,那么它可以再次请求这个锁(递归调用同步方法),不会出现死锁。 7. **volatile与synchronized比较** - `volatile`保证了变量的可见性,但不保证...

    java 多线程同步方法的实例

    当一个线程进入synchronized方法或代码块时,其他试图访问同一对象的线程会被阻塞,直到该线程执行完毕并释放锁。例如,`public synchronized void method()`就是一个同步方法。 2. **wait()、notify()和notifyAll...

    NET多线程同步方法详解

    最后,Thread.Join方法是另一种简单的同步手段,它使得一个线程等待另一个线程完成后再继续执行。这在需要按特定顺序执行线程或者依赖其他线程的结果时非常有用。 综上所述,.NET框架提供了丰富的多线程同步机制,...

    java同步synchronized关键字用法示例

    在这个例子中,`increment()`、`decrement()`和`value()`方法都是同步的,这意味着任何时候只有一个线程可以调用它们。 总之,`synchronized`关键字在Java多线程编程中扮演着关键角色,确保了共享资源的安全访问,...

    java synchronized 学习

    * 若此对象对应的类中包含了多个 synchronized 修饰的方法或代码块,多个线程访问同一个对象的任意 synchronized 修饰的方法或代码块,只要有一个线程拥有了 synchronized 同步锁,其他线程不管想访问 synchronized ...

    java多线程编程之Synchronized块同步方法

    Java中的`synchronized`是可重入的,意味着如果一个线程已经获得了某个对象的锁,并尝试再次获取该锁(比如在同步方法内部调用了另一个同步方法,而这两个方法都同步同一个对象),它将不会被阻塞,可以直接进入。...

    synchronized 实现多线程 implements Runnable

    一个简单的多线程代码示例,Java实现,用于实现同一时刻,只允许一个线程调用执行的代码块或类,即synchronized的如何使用(多线程实现),实现 Runnable

    Java异步调用转同步方法实例详解

    callback方法中,我们使用notify方法来唤醒等待的线程,而在call方法中,我们使用wait方法来等待异步调用返回结果。 2. 使用条件锁 条件锁是一种高级的同步机制,通过使用Condition对象来实现异步调用转同步。下面...

    java中synchronized用法

    但是,这个对象所属的 Class 所产生的另一对象 P2 却可以任意调用这个被加了 synchronized 关键字的方法。 在以下代码中: public void methodAAA(){ synchronized (this) { //….. } } this 指的是调用这个...

    使用synchronized实现多线程同步[借鉴].pdf

    因此,如果两个线程试图调用同一个类的`synchronized`静态方法,只有一个线程能执行。例如: ```java public class ThreadTest { public static synchronized void run() { // ... } } ``` 这里,无论多少个...

    线程调用方法

    这个退出码是通过`Thread`类的`exit()`方法设置的,但需要注意的是,直接调用`System.exit()`会终止整个应用程序,而不是仅仅一个线程。在C#中,线程的`ExitCode`属性可以用来设置和获取退出码,但同样需要注意,不...

    Java 多线程synchronized关键字详解(六)

    因此,即使有多个线程(如`Thread1`和`Thread2`)分别调用这两个方法,它们也会按照锁的获取顺序依次执行,不会同时执行。 3. **同步块(Synchronized Blocks)**: 除了同步方法,还可以使用`synchronized`关键字...

Global site tag (gtag.js) - Google Analytics