我是新來的節點併發模型。我的代碼使用Node.js和回調函數是否與Java線程相同?
下面的代碼顯示了創建Java線程並同時啓動它。
package com.main;
class MyThread implements Runnable{
private int num = 0;
MyThread(int num){
this.num = num;
}
public void run() {
// TODO Auto-generated method stub
try{
System.out.println("Thread "+this.num);
for(int c = 0; c < 5; c++){
System.out.println(" Running thread "+(c+1));
Thread.sleep(2000);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
public class Example01 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Thread[] ts = null;
try{
ts = new Thread[]{
new Thread(new MyThread(1)),
new Thread(new MyThread(2)),
new Thread(new MyThread(3))
};
for(int x = 0; x < ts.length; x++){
ts[x].start();
}
}catch(Exception e){
System.out.println(e);
}
}
}
從上面的代碼你可以看到,我開始3線程和每個線程打印5次,睡在2秒之間。
的上面的代碼的輸出是
Thread 1
Thread 2
Running thread 1
Thread 3
Running thread 1
Running thread 1
Running thread 2
Running thread 2
Running thread 2
Running thread 3
Running thread 3
Running thread 3
Running thread 4
Running thread 4
Running thread 4
Running thread 5
Running thread 5
Running thread 5
在同樣的方式我已經寫了JavaScript代碼和由節點是如下
function forEach(theArray,func){
if(Array.isArray(theArray) === true){
for(var x = 0; x < theArray.length; x++){
func(theArray[x],x);
}
}
}
forEach([1,2,3],function(num,index){
console.log("Thread "+num);
forEach([0,1,2,3,4],function(num,index){
setTimeout(function(){
console.log("Running Thread "+(num+1));
},2000);
});
});
上面的代碼的輸出是如下運行,
以上兩個代碼(javascript和java)是否以相同的方式運行?
我對Java的線程的理解等同於javascript的回調是正確的嗎?
如果我錯了,請解釋我。
沒有Javascript線程(除了瀏覽器中的web工作者,但這不是在這裏玩什麼)。所以,Java線程幾乎不像Javascript回調。他們是完全不同的東西。 node.js中的用戶Javascript是***單線程***。一次只能運行一段Javascript代碼。 – jfriend00