使用 Set 保存下已经调用过这个方法的 Thread 的 id,进入方法都先判断当前线程的 id 是否已经包含在该 Set 中:
private final Set THREADS = new HashSet<>(); public void someMethod () { if (THREADS.contains(Thread.currentThread().getId())) { throw new RuntimeException("该线程不能再调用这个方法"); } THREADS.add(Thread.currentThread().getId()); // 方法内容 }
使用 Set 保存下已经调用过这个方法的 Thread 的 id,进入方法都先判断当前线程的 id 是否已经包含在该 Set 中:
Thread.getCurrentThread.getId()
自定义一个 Thread 类
在自定义的 Thread 上添加一个 boolean 成员用于判断
例子
public class Main
{
public static void main(String[] args)
}
运行结果
Method test invoked !
其他
也可以用 ThreadLocal 解决