use*_*810 3 java multithreading
我必须同时执行我的类的多个实例.我在下面写了下面的代码.我是以两种方式完成的.但我没有看到差异.并行运行线程的正确方法是什么?
谢谢.
这里的片段:
public class MyClass {
public MyClass() {
runnable = true;
}
public boolean isRunnable() {
return runnable;
}
public static void main(String[] args) throws InterruptedException {
/* METHOD 1
MyClass myclass = new MyClass();
if (myclass.isRunnable()) {
for (int i = 0; i < loop; i++) {
myclass.execTask();
Thread.sleep(sleep);
}
}
*/
//METHOD 2
final MyClass myclass = new MyClass();
ExecutorService threadPool = Executors.newFixedThreadPool(threadNo);
for (int i = 0; i < threadNo; i++) {
threadPool.submit(new Runnable() {
public void run() {
for (int i = 0; i < loop; i++) {
myclass.execTask();
try {
Thread.sleep(sleep);
} catch (InterruptedException ex) {
Logger.getLogger(MyClass.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
});
}
threadPool.shutdown();
public void execTask(){
.........
}
}
}
Run Code Online (Sandbox Code Playgroud)
您的两种方法之间的区别在于,在"方法2"中,您实际上可能有多个执行线程(假设threadNo大于1).方法2允许多个工作线程并行地捕获Runnable和调用execTask(通过调用run)(同时,准确地说)."方法2"中的暂停几乎没有任何作用.
"方法1"完全在"主"线程上执行.它调用execTask,等待,然后再次调用它.这将连续多次调用执行.
(我假设这是伪代码,因为它的一部分不会编译.)
这是一个清理过的"方法2".请注意,我有threadNo工作线程(如果大于1,则会有帮助)并且我创建了loop Runnables.
ExecutorService threadPool = Executors.newFixedThreadPool(threadNo);
for (int i = 0; i < loop; i++) {
threadPool.submit(new Runnable() {
public void run() { myclass.execTask(); });
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17775 次 |
| 最近记录: |