在Java如何检查线程是否持有特定对象的锁?
Java语言是多年来最流行的语言之一。 Java编程最有利的特性之一是多线程。多线程允许将单个程序执行到程序的许多小部分中,同时最大限度地利用 CPU。线程是一个轻量级的进程,有助于高效地执行并发的大型进程。但有时这些线程会降低程序的效率。
让我们举一个真实的例子来说明为什么无效使用多线程概念会导致程序效率和资源的下降。
Real-life Example
Consider a class having students and a teacher is teaching them to consider a teacher a thread because the exams of the students are coming very nearly all the different teachers(Mutlthreads) try to teach as can they possible so they are teaching randomly one by one to complete the syllabus as soon as possible.
这可能会减轻教师的任务,即线程完成他们的任务,但会增加学生的负担。为了解决这种情况,我们必须同步教师的时间,即线程,以便减少学生之间的混淆。类似地,在Java我们可以同步访问特定资源(函数)的线程意味着锁定资源,以便一次只有一个资源可以访问它们。在本文中,我们将讨论如何在Java检查线程是否持有特定对象的锁。
holdLock() 方法用于在Java程序执行期间检查特定对象上的锁
参数:此方法采用我们要检查线程上是否存在锁的类的引用/对象。
返回类型:此方法返回布尔参数,即 true 或 false。True 表示当前对象上可用的监视器锁。
例子
Java
// Java Program Illusrating How to Check if a Thread Holds
// Lock on a Particular Object
// Importing the libraries
import java.io.*;
import java.util.*;
// Main class
class GFG {
// Creating the constructor
GFG()
{
// Checking the status of the lock on the object
System.out.println(Thread.holdsLock(this));
// Synchronizing the thread
synchronized (this)
{
// Checking the status of the lock on the object
// using holdsLock() method over
// same thread using this keyword
System.out.println(Thread.holdsLock(this));
}
}
// Main driver method
public static void main(String[] args)
{
// Creating a Thread class object
Thread ob = new Thread() {
// run() method for this thread which
// is invoked as start() method is invoked
public void run()
{
// Creating a class object
// inside the run() methodof the class
GFG ob1 = new GFG();
}
};
// Starting the thread with
// the help of start() method
ob.start();
}
}
false
true