有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java线程的行为与我想象的相反

只需输入随机数并计算负数,偶数正,偶数负; 任务是看到多线程工作减少执行时间; (由) 在主功能中执行相同的任务,并通过多线程执行

代码1)
首先,我创建一个实现Runnable的类。那个班负责所有的计数工作。但据我所知,每个函数(在run()方法中谈论函数调用)都是在前一个函数结束时执行的,因此应该增加时间,因为我们要循环3次以获得相同的数据。但令我惊讶的是,执行时间比简单地通过主函数中的一个循环计数要少

代码2)

在第二种情况下,我创建了3个实现Runnable接口的类,这样我的所有进程都可以并发,因此应该减少时间。但令我惊讶的是,相反的情况发生了。对于相同的任务,它比主功能中的单个循环花费更多的时间

import java.util.Random;

class ThreadClass implements Runnable {
    private int[] random;

    public ThreadClass(int[] a) {
        random=a;
    }

    int neg(int[] random) {
        int nega=0;
        for(int i=0;i<10000;i++) {
            if (random[i] < 0)
                nega++;
        }
        return nega;
    }

    int posiEven(int[] random) {
        int posEven=0;
        for(int i=0;i<10000;i++) {
            if (random[i] > 0){
                if(random[i]%2==0)
                    posEven++;
            }
        }
        return posEven;
    }

    int posiOdd(int[] random) {
        int posOdd=0;
        for(int i=0;i<10000;i++) {
            if (random[i] > 0){
                if(random[i]%2!=0)
                    posOdd++;
            }
        }
        return posOdd;
    }

    @Override
    public void run() {
        System.out.println("negative, positive odd, positive even "+neg(random)+" "+posiOdd(random)+" 
"+posiEven(random));
    }
}   

public class Lab6_Q2 {
    public static void main(String[] args) {
        int[] random = new int[10000];
        Random r = new Random();
        for(int i=0;i<10000;i++){
            random[i]=r.nextInt(201)-100;
        }
        int neg=0,posEven=0,posOdd=0;
        long startTime1 = System.nanoTime();
        for(int i=0;i<10000;i++){
            if(random[i]<0)
                neg++;
            else{
                if(random[i]%2==0)
                    posEven++;
                else
                    posOdd++;
            }
        }
        long endTime1 = System.nanoTime();
        System.out.println("negative, positive odd, positive even "+neg+" "+posOdd+" "+posEven);
        System.out.println("Time taken without using multiple threads: "+(endTime1-startTime1)+" ns");

        ThreadClass threadClass = new ThreadClass(random);
        Thread t1 = new Thread(threadClass);
        long startTime2 = System.nanoTime();
        t1.start();
        long endTime2 = System.nanoTime();

        System.out.println("Time taken  using multiple threads: "+(endTime2-startTime2)+" ns");
    }
}

代码2)

import java.util.Random;

class Negative implements Runnable
{
private int[] random;
int neg;
public Negative(int[] a)
{
    random=a;
    neg= 0;
}
public void run()
{
    
    for(int i=0;i<10;i++) 
    {
        System.out.println("in_negative");
        if (random[i] < 0)
            neg++;
    }
}
}

class Positive_even implements Runnable
{
    private int random[];
    int pos_even;

public Positive_even(int a[])
{
    random = a;
    pos_even = 0;
    
}
    public void run()

        {
          for(int i=0;i<10;i++) 
          {
              System.out.println("in_pos_even");
                if (random[i] > 0)
                {
                if(random[i]%2==0)
                    pos_even++;
            }
         }
    }
}

class positive_odd implements Runnable
{
    private int random[];
    int pos_odd;

    public positive_odd(int a[])
{
    random = a;
    pos_odd = 0;
}
public void run()
{
      for(int i=0;i<10;i++) 
      {
          System.out.println("in_pos_odd");
            if (random[i] > 0)
            {
                if(random[i]%2 != 0)
                    pos_odd++;
            }
        }
}                                         
}
public class Lab6_Ques2
{
    public static void main(String[] args) 
    {
        int[] random = new int[10];
        Random r = new Random();
        for(int i=0;i<10;i++)
        {
            random[i]=r.nextInt(20)-10;
         }
    int neg=0,posEven=0,posOdd=0;
    long startTime1 = System.nanoTime();
    for(int i=0;i<10;i++){
        if(random[i]<0)
            neg++;
        else{
            if(random[i]%2==0)
                posEven++;
            else
                posOdd++;
        }
    }
    long endTime1 = System.nanoTime();
    System.out.println("negative, positive odd, positive even "+neg+" "+posOdd+" "+posEven);
    System.out.println("Time taken without using multiple threads: "+(endTime1-startTime1)+" ns");
                                                   
    Negative threadClass1 = new Negative(random); 
    Thread t1 = new Thread(threadClass1); 
     
    Positive_even threadClass2 = new Positive_even(random);
    Thread t2 = new Thread(threadClass2);
    
    positive_odd threadClass3 = new positive_odd(random);
    Thread t3 = new Thread(threadClass3);
    
    long startTime2 = System.nanoTime(); 
    t1.start();
    t2.start();
    t3.start();
    long endTime2 = System.nanoTime(); 
                                                                         
    System.out.println("Time taken  using multiple threads: "+(endTime2-startTime2)+" ns");
}
}

共 (0) 个答案