This question already has answers here: Threads access on Synchronized Block/Code Java                                                                    (2个答案)                                                                        3年前关闭。                    假设一个单例实例被两个线程访问。两个线程正在访问称为doTask()的相同函数。public class MySingleton { Object lock = new Object(); // I omit the constructor here. public void doTask() { //first non-synchronized code synchronize(lock) { //some heavy task } //final non-synchronized code }}如果线程B正在执行繁重的任务,则当线程A访问doTask()时,我知道线程A将运行//first non-synchronized code,然后线程A注意到线程B获取了lock,因此它无法同步运行。但是线程A跳过同步的繁重任务是否继续运行//some heavy task还是线程A等待锁甚至不执行//final non-synchronized code?(我知道我可以尝试一下,但是目前我没有合适的开发环境...) 最佳答案 Java中的synchronized块强制线程等待,直到它们可以获取对象的锁为止。它将等到B完成后,再为lock锁定锁,并在块中运行代码,然后从另一端继续。重要的是要注意,当B完成执行some heavy task的内容时,它将释放对lock的锁定,并在A运行同步块的“相同时间”运行final non-synchronized code。关于java - 关于与两个线程同步,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43144801/
10-17 02:31