使用Java实现单线程模式(2)

这里的场景是:微信开发中需要每隔2个小时从腾讯的微信服务器刷新access_token,所以这里只需要使用单个线程无线循环每隔2小时刷新一次即可,我们不希望出现该类的多个线程,每个线程都去刷新access_token。

注意如果在一个线程上调用多次 start() 方法是会抛出 IllegalThreadStateException 异常的。

这里的实现其实也来自于单实例模式的一种写法,实现了线程安全和延迟加载的效果。其实对应于单例模式,单线程模式也有多种实现方法,比如使用 静态属性:

public class SingletonThread3 extends Thread
{
    private static SingletonThread3 thread = new SingletonThread3(); // static保证线程安全
   
    // 保证无法实例化 SingletonThread
    private SingletonThread3(){}
   
    public static SingletonThread3 getInstance()
    {
        return thread;
    }
   
    @Override
    public void run()
    {
        // ...
    }
}

这种实现也是线程安全的,但是没有延迟加载的效果。

AccessToken是一个“不可变对象”的类:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/2c7d9452abeaf573b8265628ced58432.html