使用 Set 儲存下已經呼叫過這個方法的 Thread 的 id,進入方法都會先判斷目前執行緒的 id 是否已經包含在該 Set 中:
private final Set<Long> 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 解