Maison > Questions et réponses > le corps du texte
如题。Java 如何实现一个方法只能被同一个线程调用一次 ,同一个线程调用第二次的时候可以抛异常。
迷茫2017-04-18 10:32:00
Utilisez Set pour enregistrer l'ID du Thread qui a appelé cette méthode. Avant de saisir la méthode, déterminez d'abord si l'ID du thread actuel est déjà inclus dans le 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());
// 方法内容
}
巴扎黑2017-04-18 10:32:00
Personnaliser une classe Thread
Ajouter un membre booléen au Thread personnalisé pour jugement
Exemple
classe publique Main
{
public static void main(String[] args)
{
new MyThread(new Runnable()
{
@Override
public void run()
{
test();
test();
test();
test();
}
}).start();
}
public static void test()
{
Thread t = Thread.currentThread();
if ( !(t instanceof MyThread) || ((MyThread)t).isTestInvoked() )
return ;
System.out.println("Method test invoked !");
}
public static class MyThread extends Thread
{
public MyThread(Runnable r)
{
super(r);
}
public MyThread()
{
super();
}
public boolean isTestInvoked()
{
boolean result = methodTestInvoked;
methodTestInvoked = true;
return result;
}
private boolean methodTestInvoked = false;
}
}
Exécuter les résultats
Méthode de test invoquée !
Autres
Vous pouvez également utiliser ThreadLocal pour le résoudre