我正在编写一个REST客户端,它有一个具有固定过期时间的访问令牌。
如何确保在到期时间之前请求新令牌?我看到两个选择:
1)需要我创建一个在给定时间内运行并请求新令牌的新线程。这对我来说似乎很浪费。
2)将利用将继续运行的GC线程,因此我不需要创建新线程。当finalize
运行时,只检查令牌是否即将到期,如果是,则请求新的,如果没有再次使对象可用,直到下一个GC周期运行。
评论或其他想法?
答案 0 :(得分:1)
使用finalize
:
finalize()
创建资源并打开新连接,而不是关闭和清理它们。java.lang.OutOfMemoryError: GC overhead limit exceeded
。创建新主题是relatively inexpensive。当然,有更好的方法,但我们在这里谈论微秒。你说创建一个新线程“看起来很浪费”,但是,只要考虑它的替代方案,you already wasted more time than the overhead caused by creating a new thread every second for the next 40 years。
使用计时器。
编辑:或者,更好的是,使用ScheduledExecutorService
(参见评论)。