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

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

阿神
阿神

闭关修行中......

membalas semua(3)
迷茫

Gunakan Set untuk menyimpan ID Thread yang telah memanggil kaedah ini Sebelum memasuki kaedah, tentukan dahulu sama ada ID thread semasa sudah disertakan dalam 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());

    // 方法内容
}
PHPzhong

Thread.getCurrentThread.getId()

巴扎黑

Sesuaikan kelas Thread
Tambahkan ahli boolean pada Thread tersuai untuk pertimbangan

Contoh

Utama kelas awam
{
utama kekosongan statik awam(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;
}

}

Jalankan keputusan
Ujian kaedah digunakan !

Lain-lain

Anda juga boleh menggunakan ThreadLocal untuk menyelesaikannya

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan