私はノード並行性モデルを初めて使用しています。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);
}
}
}
、私は間に2秒の中に眠っている、3つのスレッドと各スレッドの印刷5回を始めています。
上記のコードの出力であるIは、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);
});
});
上記のコードの出力は以下の通りであるノードによって実行されたのと同じ方法で
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
、
上記2つのコード(javascriptとjava)は同じ方法で実行されますか?
javascriptのコールバックに相当するJavaのスレッドの理解は正しいですか?
私が間違っている場合は、私に説明してください。
いいえ、ブラウザにはwebWorkers以外のJavascriptスレッドはありませんが、これはここで遊んでいるものではありません。だから、JavaスレッドはJavascriptのコールバックのようなものではありません。彼らはまったく違うものです。 node.jsのユーザーJavascriptは*** single threaded ***です。一度に1つのJavascriptしか実行されません。 – jfriend00