Member 13537513 Ответов: 3

Как написать java-код с помощью потоков?


Я должен написать java-программу, которая могла бы показать, что многопоточность (потоки, работающие одновременно) эффективна в сокращении времени выполнения.
Дело в том, что у меня уже есть код, но мне нужно использовать в нем потоки.
пожалуйста, помогите переписать его.

Что я уже пробовал:

import java.util.*;
public class JavaOnlineTest {

public static String questions(){
Scanner sc=new Scanner(System.in);
int output=0;
System.out.println("1)Who is the 45th president of USA?");
System.out.println("1.Barrack Obama 2.Hillary Clinton 3.Donald Trump 4.George W Bush");
int answer=sc.nextInt();
if(answer==3)
output+=1;
else
output+=0;
System.out.println("2)Who is the 1st Prime Minister of India?");
System.out.println("1.Subash Chandra Bose 2.Jawahar Lal Nehru 3.Sardar Vallabhai Patel 4.Mahatma Gandhi");
answer=sc.nextInt();
if(answer==2)
output+=1;
else
output+=0;
//proceed for 3rd question here.
System.out.println("Your result out of 10 is "+output);
if(output>=0&&output<5){
System.out.println("You've Failed");
}else if(output>4 && output<8){
System.out.println("Your in B Class");
}else if(output>7 && output<=10){
System.out.println("Your in A Class");
}
System.out.println("Do you want to retake the test");
System.out.println("Type 'Y' or 'N'");
String retaking=sc.next().trim();
return retaking;
}

public static void main(String [] args){

boolean retake;

String retaking;


while(true){
retaking=questions();
if(retaking.equalsIgnoreCase("Y")){
retake=true;


}else if(retaking.equalsIgnoreCase("N")){
System.out.println("Good Luck!...");
retake=false;
retaking="N";
break;

}
}


}
}

3 Ответов

Рейтинг:
1
Рейтинг:
1

CPallini

Многопоточность была бы неэффективна в повышении скорости такой программы.


Рейтинг:
0

Dave Kreskowiak

В этом коде нет ничего, с чем потоковая передача могла бы что-то сделать. Это полностью "управляемое меню" взаимодействие с пользователем практически без обработки чего-либо.

Многопоточность помогает в ситуациях, когда проблема или рабочая нагрузка связаны с вычислениями или вводом-выводом.

Длительная процедура помещается в фоновый поток, освобождая поток пользовательского интерфейса для ответа на вводимые пользователем данные и обновления дисплеев.

Задачи, связанные с вычислениями,-это задачи, в которых задача может быть разбита на несколько частей, которые могут быть решены одновременно, причем каждая часть помещается в свой собственный поток. Например, вам нужно выполнить длинные вычисления по 1 000 000 различных элементов, каждый из которых не имеет ничего общего друг с другом. Вы можете разбить 1 000 000 элементов на, скажем, 5 групп и иметь 5 потоков, каждый из которых работает над своей собственной группой.

Проблемы, связанные с вводом-выводом, возникают там, где код ожидает ответа от файла или операции запроса, например чтения огромного файла, ожидания веб-запроса, опроса внешнего устройства и т. д. В принципе, поток ничего не делает, но ждет ввода. Таким образом, вы можете поместить "ожидающую" часть в отдельный поток, снова освободив поток пользовательского интерфейса для ответа пользователю и отображения.