Java-取消对同步函数的排队调用

Java-取消对同步函数的排队调用,java,multithreading,synchronization,Java,Multithreading,Synchronization,我刚刚开始学习Java中的线程,所以这可能是一个基本问题,但我在网上找不到答案 我有两个线程可以调用一个同步函数。按照我的理解,如果第二个线程调用它,而第一个线程已经调用了它,那么第二个线程将等待第一个线程完成后再调用它。但是,我不希望第二个线程调用它。那么最简单的方法是使用显式锁()并调用它的tryLock()方法 如果返回true,则表示没有其他线程具有锁,并且当前线程已获取该锁 如果返回false,则表示另一个线程持有锁,您不应该调用该方法 请记住始终在finally块中调用unlock(

我刚刚开始学习Java中的线程,所以这可能是一个基本问题,但我在网上找不到答案


我有两个线程可以调用一个同步函数。按照我的理解,如果第二个线程调用它,而第一个线程已经调用了它,那么第二个线程将等待第一个线程完成后再调用它。但是,我不希望第二个线程调用它。

那么最简单的方法是使用显式锁()并调用它的
tryLock()
方法

如果返回true,则表示没有其他线程具有锁,并且当前线程已获取该锁

如果返回false,则表示另一个线程持有锁,您不应该调用该方法


请记住始终在finally块中调用
unlock()
,以确保即使在引发异常的情况下也会释放锁。

然后最简单的方法是使用显式锁()并调用其
tryLock()
方法

如果返回true,则表示没有其他线程具有锁,并且当前线程已获取该锁

如果返回false,则表示另一个线程持有锁,您不应该调用该方法


请记住始终在finally块中调用
unlock()
,以确保即使在引发异常的情况下也能释放锁。

您遇到的困难是什么?为什么不设计第二个线程,这样它就不会调用那个方法呢?是的,事实就是这样。您的意思是,如果一个方法被调用过一次,您就不想允许再次调用它了吗?比如“脏”旗?我想要的是像JB Nizet回答中的锁一样的东西。再说一次,我对使用多线程还不熟悉,我不知道它们。你在这里有什么困难?为什么不设计第二个线程,这样它就不会调用那个方法呢?是的,事实就是这样。您的意思是,如果一个方法被调用过一次,您就不想允许再次调用它了吗?比如“脏”旗?我想要的是像JB Nizet回答中的锁一样的东西。再说一次,我对多线程还不熟悉,我不知道它们。这似乎是我一直在寻找的。在我运行一些测试之后,我将接受。这似乎是我正在寻找的。我将在稍后运行一些测试后接受。