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) 个答案