Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当线程从对象中移出时,它意味着什么;谁的显示器?_Java_Multithreading - Fatal编程技术网

Java 当线程从对象中移出时,它意味着什么;谁的显示器?

Java 当线程从对象中移出时,它意味着什么;谁的显示器?,java,multithreading,Java,Multithreading,我想知道的是,当一个线程从锁中进入时,它是否意味着它“结束”,或者只是它已经完成了使用该特定线程所在监视器的对象的函数或代码?只是它已经完成了使用该对象的函数或代码。这类代码通常被称为(s)。用于一般理解:方法在线程上运行。因此,一个方法可能同时被多个线程执行 假设您希望确保一个方法或其一部分一次只能由一个线程执行。这称为临界截面 Java中的关键部分可以通过锁进行保护:隐式通过或显式通过 一次只有一个线程可以获取锁,进入临界段需要首先获取锁。在临界段的末尾,锁被释放,线程继续运行,但现在没有锁

我想知道的是,当一个线程从锁中进入时,它是否意味着它“结束”,或者只是它已经完成了使用该特定线程所在监视器的对象的函数或代码?

只是它已经完成了使用该对象的函数或代码。这类代码通常被称为(s)。

用于一般理解:方法在线程上运行。因此,一个方法可能同时被多个线程执行

假设您希望确保一个方法或其一部分一次只能由一个线程执行。这称为临界截面

Java中的关键部分可以通过锁进行保护:隐式通过或显式通过

一次只有一个线程可以获取锁,进入临界段需要首先获取锁。在临界段的末尾,锁被释放,线程继续运行,但现在没有锁


遇到由另一个线程持有的锁的线程(不一定是同一个临界段)无法在该点继续,必须等待。当线程和等待同一锁的其他线程可以重试获取锁时,它们将收到通知。同样,只有一个线程将获胜,并且过程将重复(除非您有一个示例)。

如果您将代码放在问题中,解释起来会更容易。至少是循环开始和结束的线路,以及你进入和离开监视器的线路。实际上,这是一个困扰我的一般性问题。例如,一个线程使用完一个函数后,该线程会再次使用它,还是另一个线程同时使用它。。并且该函数是同步的如果在for循环中调用了
synchronized
函数,则线程在循环的每次迭代中都以独占方式访问该函数,因此一旦函数结束,线程就脱离了关键部分。但是,如果在
synchronized
函数中有一个for循环,那么一旦for循环或整个函数体结束,线程就会从关键部分出来。你所说的“线程只能为该函数独占访问该函数”是什么意思?我理解了大部分内容,谢谢!请澄清这一说法