创建Thread对象或实际启动线程是否昂贵?

Mar*_*ius 2 java multithreading

考虑这个问题.

现在有很多原因导致创建线程的成本很高,特别是需要分配大量内存并且需要注册线程的事实.

现在考虑这段代码:

Thread thread = new Thread(new SomeRunnable());
thread.start();
Run Code Online (Sandbox Code Playgroud)

哪一部分是"昂贵的"部分?实际创建Thread对象的行还是启动线程的行?或两者?为什么我问的原因是因为我写一个游戏服务器的组件和我辩论,如果我要尽快播放器连接创建Thread对象,一旦玩家完成登录启动线程,还是应该我都在玩家完成登录后创建并启动线程.

Tom*_*icz 11

创建一个Thread对象非常便宜.你只需付出调用构造函数的代价.这start()是占用空间的方法(本机调用,堆栈内存等)

另一方面,如果您创建了大量线程,请考虑提前创建(并启动它们)并拥有池.这已经为你完成了,请查看Executors课程.