2016-05-22 9 views
1

OSレベルでマルチスレッドに関する質問があります。
私はあなたがループのための2つの出力内の任意のミスをせずに、同時に並行して実行することができます上記のコードで見たようマルチスレッド、マルチスレッドを使用していなくてもJavaコードが複数のスレッドで実行されます

public static void main(String[] args) 
{ 
    int sum1=0, sum2=0; 
    for(int i=0; i < 10000; i++) 
     sum1 += i; 
    for(int j=0; j < 20000; j++) 
     sum2 += j; 
    System.out.print(sum1); 
    System.out.print(sum2); 
} 

を使用しないJavaコードを持っています。 したがって、OSは、スピードアップするために2つのスレッドで自分のコードを同時に実行できます。 OSでスレッドを使用してコードをスピードアップしますか?

+2

あなたは** OS **があなたの** Javaコード**(またはバイトコード)を分析して並列化の機会を自動的に推論できるかどうかを尋ねていますか? –

+1

'2つのforループは同時に実行できます.' False。それらは線形に実行されます。最初の1つのループ( 'i'変数)、次に2番目の変数(' j'変数)。 – UDKOX

+0

これらのコードは決して同時に実行されることはありません。処理速度が速すぎるので、それらが同時に実行されていると思うので、Javaの行ごとにプログラムを実行してください。 –

答えて

3

私はあなたの質問を理解していますが、2つのforループが互いに影響を及ぼさずに並行して実行できると言っても間違いありません。しかし、これはあなたがjavaで自分自身をやらなければならないことです。ここでは、並列に実行される2つのスレッドの例は次のとおりです。

public staic void main(String args[]){ 
    Thread thread1 = new Thread(){ 
    public void run(){ 
     for(int i = 0; i < 100; i++){ 
     System.out.println(i); 
     } 
    } 
    } 
    Thread thread2 = new Thread(){ 
    public void run(){ 
     for(int i = 0; i < 100; i++){ 
     System.out.println(i); 
     } 
    } 
    } 
    thread1.start(); 
    thread2.start(); 
} 

あなたはコードがすべてのスレッドが終了するのを、あなたはこのように、.join()方法を使用することができ、「待つ」にしたい場合:

try{ 
    thread1.join(); 
    thread2.join(); 
}catch(InterruptedException e){ 
    e.printStackTrace(); 
} 
関連する問題