| | |
| | | } |
| | | |
| | | private val fetchData = mutableListOf<FetchData>() |
| | | private var shecdule = Executors.newScheduledThreadPool(2) |
| | | private var schedule = Executors.newScheduledThreadPool(1) |
| | | private var maintainSchedule = Executors.newScheduledThreadPool(1) |
| | | private var fetchTime: Date = Date() |
| | | private var maintainTime: Date = Date() |
| | | |
| | |
| | | maintainTask() |
| | | } |
| | | |
| | | private fun fetchTask() { |
| | | shecdule.scheduleAtFixedRate({ |
| | | private fun fetchTask(isFirst: Boolean = false) { |
| | | if (!isFirst) { |
| | | schedule = closeThread(schedule) |
| | | } |
| | | schedule.scheduleAtFixedRate({ |
| | | fetchTime = Date() |
| | | if (Date().time - maintainTime.time > (MAINTAIN_PERIOD_MIN + 1) * 60 * 1000) { |
| | | if (Date().time - maintainTime.time > (MAINTAIN_PERIOD_MIN * 2) * 60 * 1000) { |
| | | maintainTask() |
| | | } |
| | | fetchData.forEach { |
| | |
| | | }, 0, FETCH_PERIOD_MIN, TimeUnit.MINUTES) |
| | | } |
| | | |
| | | private fun maintainTask() { |
| | | |
| | | shecdule.scheduleAtFixedRate({ |
| | | private fun maintainTask(isFirst: Boolean = false) { |
| | | if (!isFirst) { |
| | | maintainSchedule = closeThread(maintainSchedule) |
| | | } |
| | | maintainSchedule.scheduleAtFixedRate({ |
| | | maintainTime = Date() |
| | | if (Date().time - fetchTime.time > (FETCH_PERIOD_MIN + 1) * 60 * 1000) { |
| | | if (Date().time - fetchTime.time > (FETCH_PERIOD_MIN * 2) * 60 * 1000) { |
| | | fetchTask() |
| | | } |
| | | }, 0, MAINTAIN_PERIOD_MIN, TimeUnit.MINUTES) |
| | | } |
| | | |
| | | private fun closeThread(s: ScheduledExecutorService): ScheduledExecutorService { |
| | | try { |
| | | s.shutdown() |
| | | if (s.awaitTermination(10, TimeUnit.SECONDS)) { |
| | | s.shutdownNow() |
| | | } |
| | | } catch (e: InterruptedException) { |
| | | e.printStackTrace() |
| | | s.shutdownNow() |
| | | } |
| | | return Executors.newScheduledThreadPool(1) |
| | | } |
| | | } |