Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 87 additions & 0 deletions Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package GeekBrains;

import org.w3c.dom.ls.LSOutput;

public class Main {

static final int SIZE = 10_000_000;
static final int HALF = SIZE/2;


public static void main(String[] args) {
mhetodOne();
mhetodTwo();
}


static void mhetodOne(){
float[] arr = new float [SIZE];
for (int i = 0; i < arr.length; i++) {
arr[i]=1;
}
long a = System.currentTimeMillis();
for (int j = 0; j < arr.length;j++) {
arr[j] = (float)(arr[j] * Math.sin(0.2f + j / 5) * Math.cos(0.2f + j / 5) * Math.cos(0.4f + j / 2));
}
System.out.println(System.currentTimeMillis() - a);

}


// Второй разбивает массив на два массива,
// в двух потоках высчитывает новые значения
// и потом склеивает эти массивы обратно в один.


//System.arraycopy(массив-источник, откуда начинаем брать данные из массива-источника, массив-назначение, откуда начинаем записывать данные в массив-назначение, сколько ячеек копируем)
static void mhetodTwo(){
long a = System.currentTimeMillis();
// 1 поток из первой половин
new Thread(new MyRunnableClass()).start();
// 2 поток из второй половины
new Thread(new MyRunnableClassTwo()).start();
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Эти потоки еще нужно подождать, вызвав join()

System.out.println(System.currentTimeMillis() - a);
}

static class MyRunnableClass implements Runnable {
@Override
public void run() {


float[] arr = new float [SIZE];
float[] arrHalf = new float [HALF];
System.arraycopy(arr,0,arrHalf,0, arr.length/2);
for (int i = 0; i < arrHalf.length; i++) {
arr[i]=1;
}

for (int j = 0; j < arrHalf.length;j++) {
arr[j] = (float)(arr[j] * Math.sin(0.2f + j / 5) * Math.cos(0.2f + j / 5) * Math.cos(0.4f + j / 2));
}
System.arraycopy(arrHalf,0,arr,0, arrHalf.length);
}
}

static class MyRunnableClassTwo implements Runnable {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MyRunnableClassTwo похож на MyRunnableClass. Отличие только в индексах для копирования (откуда и куда). Можно в один объединить


@Override
public void run() {
float[] arr = new float [SIZE];
float[] arrHalfTwo = new float [HALF];

System.arraycopy(arr,arr.length/2,arrHalfTwo,0, arr.length/2);
for (int i = 0; i < arrHalfTwo.length; i++) {
arr[i]=1;
}

for (int j = 0; j < arrHalfTwo.length;j++) {
arr[j] = (float)(arr[j] * Math.sin(0.2f + j / 5) * Math.cos(0.2f + j / 5) * Math.cos(0.4f + j / 2));
}

System.arraycopy(arrHalfTwo,0,arr,arrHalfTwo.length/2+1, arrHalfTwo.length);
}
}
}