Java如何实现一个方法只能被同一个线程调用一次?
阿神
阿神 2017-04-18 10:30:00
0
3
463

如题。Java 如何实现一个方法只能被同一个线程调用一次 ,同一个线程调用第二次的时候可以抛异常。

阿神
阿神

闭关修行中......

모든 응답 (3)
迷茫

使用 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()); // 方法内容 }
    PHPzhong

    Thread.getCurrentThread.getId()

      巴扎黑

      自定义一个 Thread 类
      在自定义的 Thread 上添加一个 boolean 成员用于判断

      例子

      public class 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; }

      }

      运行结果
      Method test invoked !

      其他

      也可以用 ThreadLocal 解决

        최신 다운로드
        더>
        웹 효과
        웹사이트 소스 코드
        웹사이트 자료
        프론트엔드 템플릿
        회사 소개 부인 성명 Sitemap
        PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!