线程池中的任务为什么先执行的,反而打印的开始时间靠后

发布于 2022-09-05 20:52:18 字数 3761 浏览 25 评论 0

先附上我的代码:

public class App 
{
    public static void main( String[] args )
    {
        ExecutorService mExecutorService = Executors.newFixedThreadPool(220);

        for (int i = 0; i < 1000; i++){
            int a = i;
            Runnable runnable = () -> {
                try {
                    DateFormat mDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSSS");
                    System.out.println(mDateFormat.format(new Date(System.currentTimeMillis())) + String.format("运行%d号任务",a));

                    Thread.sleep(1000000);

                    System.out.println(mDateFormat.format(new Date(System.currentTimeMillis())) + String.format("运行%d号任务完成",a));
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            };
            mExecutorService.execute(runnable);
        }
        mExecutorService.shutdown();
    }
}

我看到打印出来的结果是这样的(截取部分)

2017-09-06 00:05:27:0931运行4号任务
2017-09-06 00:05:27:0929运行51号任务
2017-09-06 00:05:27:0929运行70号任务
2017-09-06 00:05:27:0932运行134号任务
2017-09-06 00:05:27:0932运行45号任务
2017-09-06 00:05:27:0928运行3号任务
2017-09-06 00:05:27:0928运行67号任务
2017-09-06 00:05:27:0932运行57号任务
2017-09-06 00:05:27:0929运行58号任务
2017-09-06 00:05:27:0929运行179号任务
2017-09-06 00:05:27:0932运行69号任务
2017-09-06 00:05:27:0928运行148号任务
2017-09-06 00:05:27:0933运行42号任务
2017-09-06 00:05:27:0933运行101号任务
2017-09-06 00:05:27:0928运行168号任务
2017-09-06 00:05:27:0933运行46号任务
2017-09-06 00:05:27:0933运行26号任务
2017-09-06 00:05:27:0931运行30号任务
2017-09-06 00:05:27:0933运行131号任务
2017-09-06 00:05:27:0933运行90号任务
2017-09-06 00:05:27:0931运行23号任务
2017-09-06 00:05:27:0933运行121号任务
2017-09-06 00:05:27:0933运行77号任务
2017-09-06 00:05:27:0933运行124号任务
2017-09-06 00:05:27:0934运行56号任务
2017-09-06 00:05:27:0934运行18号任务
2017-09-06 00:05:27:0934运行39号任务
2017-09-06 00:05:27:0933运行79号任务
2017-09-06 00:05:27:0934运行120号任务
2017-09-06 00:05:27:0934运行129号任务
2017-09-06 00:05:27:0934运行126号任务
2017-09-06 00:05:27:0932运行123号任务
2017-09-06 00:05:27:0929运行97号任务
2017-09-06 00:05:27:0935运行1号任务
2017-09-06 00:05:27:0935运行150号任务
2017-09-06 00:05:27:0935运行28号任务
2017-09-06 00:05:27:0932运行153号任务
2017-09-06 00:05:27:0935运行107号任务
2017-09-06 00:05:27:0932运行165号任务
2017-09-06 00:05:27:0928运行48号任务
2017-09-06 00:05:27:0935运行13号任务
2017-09-06 00:05:27:0935运行76号任务
2017-09-06 00:05:27:0935运行86号任务
2017-09-06 00:05:27:0928运行12号任务
2017-09-06 00:05:27:0936运行102号任务
2017-09-06 00:05:27:0936运行68号任务
2017-09-06 00:05:27:0936运行158号任务
2017-09-06 00:05:27:0936运行8号任务
2017-09-06 00:05:27:0936运行80号任务
2017-09-06 00:05:27:0935运行74号任务
2017-09-06 00:05:27:0936运行108号任务
2017-09-06 00:05:27:0936运行25号任务
2017-09-06 00:05:27:0935运行143号任务
2017-09-06 00:05:27:0936运行139号任务
2017-09-06 00:05:27:0936运行144号任务
2017-09-06 00:05:27:0935运行15号任务
2017-09-06 00:05:27:0936运行29号任务
2017-09-06 00:05:27:0935运行21号任务
2017-09-06 00:05:27:0935运行135号任务
2017-09-06 00:05:27:0935运行59号任务
2017-09-06 00:05:27:0937运行88号任务
2017-09-06 00:05:27:0937运行40号任务
2017-09-06 00:05:27:0935运行52号任务
2017-09-06 00:05:27:0937运行82号任务
2017-09-06 00:05:27:0937运行170号任务
2017-09-06 00:05:27:0935运行17号任务
2017-09-06 00:05:27:0937运行84号任务
2017-09-06 00:05:27:0937运行117号任务
2017-09-06 00:05:27:0934运行133号任务
2017-09-06 00:05:27:0937运行53号任务
2017-09-06 00:05:27:0934运行163号任务
2017-09-06 00:05:27:0934运行142号任务
2017-09-06 00:05:27:0938运行99号任务
2017-09-06 00:05:27:0934运行87号任务
2017-09-06 00:05:27:0934运行85号任务
2017-09-06 00:05:27:0934运行78号任务
2017-09-06 00:05:27:0938运行141号任务
2017-09-06 00:05:27:0934运行71号任务
2017-09-06 00:05:27:0938运行110号任务
2017-09-06 00:05:27:0934运行94号任务
2017-09-06 00:05:27:0939运行98号任务
2017-09-06 00:05:27:0939运行136号任务
2017-09-06 00:05:27:0938运行0号任务

可以看到,4号是第一个执行的,但是他的执行时间,并不是最早的

请问这是什么情况?还是我这么写是不对的。谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一枫情书 2022-09-12 20:52:19

for中创建的线程,优先级是相同的
线程的调度执行是无序
执行DateFormat mDateFormat = new SimpleDateFormat()之后,时间已经被初始化完成
但执行到输出语句时,其他的线程又开始执行

关于从前 2022-09-12 20:52:19

线程调用的随机性

坏尐絯℡ 2022-09-12 20:52:19

那是输出时间不是执行时间

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文