为了账号安全,请及时绑定邮箱和手机立即绑定

Java如何实现一个方法只能被同一个线程调用一次?

Java如何实现一个方法只能被同一个线程调用一次?

潇潇雨雨 2019-02-20 11:09:32
如题。Java 如何实现一个方法只能被同一个线程调用一次 ,同一个线程调用第二次的时候可以抛异常。
查看完整描述

2 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

Thread.getCurrentThread.getId()

查看完整回答
反对 回复 2019-03-01
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

自定义一个 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 解决

查看完整回答
反对 回复 2019-03-01
  • 2 回答
  • 0 关注
  • 787 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信