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

如何定期安排任务?

如何定期安排任务?

Go
慕虎7371278 2023-05-04 17:02:36
是否有任何本地库或第三方支持,如ScheduledExecutorServicego lang 的 java native library 用于生产用例?请在 java 1.8 中找到代码片段:import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;public class TaskScheduler {    /**     * @param args     */    public static void main(String[] args) {        Runnable runnable = ()-> {                // task to run goes here                System.out.println("Hello !!");        };        ScheduledExecutorService service = Executors.newScheduledThreadPool(1);        service.scheduleAtFixedRate(runnable, 0, 1, TimeUnit.SECONDS);    }}它将Hello !!每隔一秒打印一次。
查看完整描述

1 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

无需使用 3rd 方库来实现。只需利用 goroutine 的优势并使用包time.Sleep()中可用的 API time,即可获得相同的结果。


例子:


go func() {

    for true {

        fmt.Println("Hello !!")

        time.Sleep(1 * time.Second)

    }

}()

游乐场:https://play.golang.org/p/IMV_IAt-VQX


使用代码 #1 的示例

根据 Siddhanta 的建议。这是一个使用 ticker 实现相同结果的示例(取自ticker 的 go 文档页面,根据您的要求进行了一些修改)。


done := make(chan bool)

ticker := time.NewTicker(1 * time.Second)


go func() {

    for {

        select {

        case <-done:

            ticker.Stop()

            return

        case <-ticker.C:

            fmt.Println("Hello !!")

        }

    }

}()


// wait for 10 seconds

time.Sleep(10 *time.Second)

done <- true

ticker时间信息(执行的时间Hello !!)可以从channel中获取ticker.C。


case t := <-ticker.C:

    fmt.Println(t)

游乐场:https://play.golang.org/p/TN2M-AMr39L


使用代码 #2 的示例

另一个简化的 ticker 示例,取自https://gobyexample.com/tickers


ticker := time.NewTicker(1 * time.Second)

go func() {

    for range ticker.C {

        fmt.Println("Hello !!")

    }

}()


// wait for 10 seconds

time.Sleep(10 *time.Second)

ticker.Stop()


查看完整回答
反对 回复 2023-05-04
  • 1 回答
  • 0 关注
  • 73 浏览
慕课专栏
更多

添加回答

举报

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