#java #multithreading #concurrency #parallel-processing
Вопрос:
Привет программистам всего мира, чтобы понять , в чем разница между параллелизмом и параллелизмом, мне было поручено решить эту проблему, но я столкнулся с проблемой, которую не смог решить, и это заняло у меня много времени, поэтому я пришел сюда, и я подумал, что кто-то может мне помочь . У меня проблема здесь я построил программу , которая имеет 4 класса, 2 из них являются «клиентскими» (Agsrq для отправки генерирует числа квадратов и AgFibo, поэтому отправляйте последовательность чисел Фибоначчи), используемые для отправки номера на сервер (agclassserver получает данные от Agsqr и Agfibo для заказа и отображения их в виде списка ) , и я добавляю другой класс ,чтобы сервер принимал много клиентов (многопоточность) в этом случае Agsqr и AgFibo выполняют роль клиента.
Итак, вот моя проблема , когда я выполнить классов (agclassserver «сервер» , Agsqr amp; AgFibo «клиенты») в результате, дает мне только первым клиентом позволяет сказать «Agsqr» и когда я выполнить AgFibo он не выполняет, но это дает мне еще один исполнения Agsqr «так я и есть результат двух Agsqr »
Вот все вае класса I, используемые в этой программе
Agclassserver
package smatp2; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.Collections; import java.util.concurrent.*; public class agclassserver { public static void main(String[] args) throws IOException, InterruptedException { // TODO Auto-generated method stub ArrayListlt;Integergt; array = new ArrayListlt;Integergt;(); ArrayListlt;ClassesHandlergt; classes_handler = new ArrayListlt;ClassesHandlergt;(); ExecutorService service= Executors.newFixedThreadPool(10); boolean var=true; int message; try { while(true) { ServerSocket server = new ServerSocket(9090); System.out.println("I waiting for the client "); Socket socket = server.accept();// waiting for client to connect with server ClassesHandler client = new ClassesHandler(socket); classes_handler.add(client); service.execute(client); } }catch (Exception e) { } } }
Agsqr
package smatp2; import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.Socket; public class Agsqr { public static void main(String[] args) throws IOException, InterruptedException { // TODO Auto-generated method stub try { Socket socket = new Socket ("localhost", 9090); int n=0; OutputStream output = socket.getOutputStream(); DataOutputStream stream = new DataOutputStream(output); while(true) { int result = n*n; stream.writeInt(result); n ; Thread.sleep(1000); } }catch(Exception e) { } } }
AgFibo
package smatp2; import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; public class AgFibo extends Thread { public synchronized void run() { } public static void main(String[] args) throws UnknownHostException, IOException, InterruptedException { // TODO Auto-generated method stub try { int number ; int previousNumber = 0; int nextNumber = 1; boolean variable=false ; Socket socket = new Socket ("localhost", 9090); int n=0; OutputStream output = socket.getOutputStream(); DataOutputStream stream = new DataOutputStream(output); while(!variable){ stream.writeInt(previousNumber); int sum = previousNumber nextNumber; previousNumber = nextNumber; nextNumber = sum; Thread.sleep(1000); } }catch(Exception e) { } } }
ClassesHandler
package smatp2; import java.io.*; import java.net.*; import java.util.ArrayList; import java.util.Collections; public class ClassesHandler implements Runnable { private Socket socket; private int message; ArrayListlt;Integergt; array = new ArrayListlt;Integergt;(); private DataInputStream dataInputStream; public ClassesHandler(Socket socket) throws IOException{ this.socket = socket; dataInputStream = new DataInputStream(socket.getInputStream()); } @Override public void run() { // TODO Auto-generated method stub try { while(true) { message = dataInputStream.readInt(); array.add(message);// waiting for client to connect with server Collections.sort(array); System.out.println(message); System.out.println(array); //Thread.sleep(500); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
agclassserver /* Извините, я забыл опубликовать класс classserver */
package smatp2; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.Collections; import java.util.concurrent.*; public class agclassserver { public static void main(String[] args) throws IOException, InterruptedException { // TODO Auto-generated method stub ArrayListlt;Integergt; array = new ArrayListlt;Integergt;(); ArrayListlt;Integergt; arraySQR = new ArrayListlt;Integergt;(); ArrayListlt;Integergt; arrayFibo = new ArrayListlt;Integergt;(); ArrayListlt;ClassesHandlergt; classes_handler = new ArrayListlt;ClassesHandlergt;(); ExecutorService service= Executors.newFixedThreadPool(10); boolean var=true; int message; try { ServerSocket server = new ServerSocket(9090); while(true) { System.out.println("I waiting for the client "); Socket socket = server.accept();// waiting for client to connect with server String hostName = socket.getInetAddress().getHostName(); ClassesHandler client = new ClassesHandler(socket,array,arraySQR,arrayFibo,hostName); classes_handler.add(client); service.execute(client); } }catch (Exception e) { } } }
Комментарии:
1. Почему вы не печатаете пойманное исключение в классе agclassserver?
2. @ecerer , О , мои извинения, я был очень смущен, так что забыл опубликовать . кроме того, я решил проблему, если вам интересно, я мог бы отправить вам всю программу .
Ответ №1:
Параллельное против параллельного.
Представьте, что вам нужно получить новый паспорт и подготовить презентацию для работы.
Не параллельно и не параллельно: сначала вы идете за паспортом, а затем готовите презентацию.
Не параллельно, а параллельно: вы идете в посольство и ждете своей очереди на стуле. Пока вы ждете, вы работаете над своей презентацией. Как только настанет ваша очередь, вы закроете ноутбук и заполните паспортные документы, а затем завершите презентацию.
Параллельно и одновременно: вы идете работать над своей презентацией, пока отправляете жену/мужа в посольство за паспортом.
Существует также возможность делать параллельные и не параллельные операции. Но это не согласуется с приведенным выше примером. И примером может быть вычисление суммы 2 огромных целых массивов. С помощью SIMD несколько целочисленных добавлений могут выполняться параллельно, но параллелизма нет, так как существует только один запрос.