ran*_*afk 3 java parallel-processing multithreading
我正试图弄清楚如何在java中进行多线程.现在,我的程序运行良好,没有并发,但我想实现多线程,以帮助加快它.
该程序运行单独子类的多个对象,并且每个对象的50%的时间评估花费在仅使用一个核而不是8个可用核的过程中.这些对象完全相互独立,但在程序中用作输入.
我试图通过让子类实现Runnable来多线程,然后让我的程序为每个这样的对象使用一个线程.这是正确的方法吗?
但是,java中的线程如何处理?每次运行后我是否需要处理线程?加入如何工作?
谢谢
你已经走上了正轨.您将创建一个Thread对象
Runnable r = new MyClassImplementingRunnable();
Thread t = new Thread(p);
t.start();
t.join(); // wait for thread to die
Run Code Online (Sandbox Code Playgroud)
Thread对象像任何其他对象一样被垃圾收集,当run方法完成时,线程本身就会死掉.关键是你的Runnable的run方法确实必须保证返回,你的设计不能依赖于能够从外部杀死线程.
如果您要拥有大量线程,则需要等待它们全部完成,因此您可以保留已启动的线程集合,然后使用t.join(smallNumberOfMillis)查看其中哪些已完成.这有点低效,所以有其他技术允许线程相互通信,我建议阅读 这篇关于它们的文章.
@denis还提到Executor和相关类在Threads之上提供了更好的抽象.如果您对学习背景感兴趣,那么手动管理Threads很有意思.如果您只想完成工作,请遵循Denis的建议.