【问题标题】:Does my java code runs on multiple threads even if I doesn't use multi threading即使我不使用多线程,我的 java 代码是否在多个线程上运行
【发布时间】:2016-09-19 12:49:32
【问题描述】:

我有一个关于操作系统级别的多线程的问题。
我有一个不使用多线程的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);
}

正如您在上面的代码中看到的,两个 for 循环可以同时执行,而不会在输出中产生任何错误。 因此,操作系统可以同时使用 2 个线程运行我的代码以加快速度。 是否有任何操作系统使用线程来加速我的代码?

【问题讨论】:

  • 您是在问 OS 是否能够分析您的 Java 代码(或字节码)并自动推断并行化机会?
  • two for loops can execute concurrently at the same time 假。它们是线性执行的。第一个循环(i 变量)然后是第二个(j 变量)。
  • 这些代码从不同时运行,处理速度太快你以为是同时运行的,java中程序是逐行运行的,
  • @UDKOX - OP 说它们可以同时执行而不影响可观察的行为。
  • 有一些(非标准)编程语言具有“隐式并发”。 Java 不是其中之一。

标签: java multithreading operating-system


【解决方案1】:

我理解你的问题,你说两个 for 循环可以并行运行而不相互影响是正确的。但是,这是您必须在 java 中自己做的事情。以下是两个线程并行运行的示例:

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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多