问题描述
只需导入随机数并计算编号。否定数,even_positive,even_negative; 任务是看到多线程工作减少执行时间; 通过) 在主要功能和多线程中执行相同的任务;
代码1)
首先,我创建一个实现Runnable
的类。那个班级完成所有计数工作。但是据我说,每个函数(谈论run()
方法内部的函数调用)在上一个函数结束时都在执行,因此,由于我们要循环3次以获取相同的数据,因此甚至应该增加时间。但是令我惊讶的是,执行时间比简单地通过main函数中的一个循环计数要短;
代码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 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,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 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");
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)