Boas!
estou a fazer um proxy e tenho que recorrer a uma poolthreads atraves da fixedthreadpool, no entanto nao estou a entender qual vai ser o número maximo de threads em paralelo?
obrigada
Boas!
estou a fazer um proxy e tenho que recorrer a uma poolthreads atraves da fixedthreadpool, no entanto nao estou a entender qual vai ser o número maximo de threads em paralelo?
obrigada
http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/Executors.html#newFixedThreadPool(int)
O seu pool de threads irá ter no máximo nThreads threads. Se você por algum motivo precisar de mais threads, o processo que irá usar esse pool irá esperar até que uma thread esteja disponível.
será que me poderia explicar o funcionamento da fixedthreadpool nao estou mesmo a conseguir perceber
Vou dar um exemplo. Digamos que você tem uma lanchonete com 4 funcionários na cozinha. (Ou seja, 4 threads). Isso quer dizer que você pode preparar até 4 pedidos simultaneamente, sem precisar esperar alguém ficar livre. Se quiser ter um 5 pedido simultâneo, ele precisa esperar uma thread ficar livre.
obrigadassima, já percebi! agora a minha duvida consta como começar no java, como fazer fixedthreadpool com a framework executor!
é que eu sou principiante no java, e tenho um trabalho escolar para fazer uma proxy e requer o uso da fixedthreadpool e estou completamente perdida!
BOAS!
tenho este codigo
ackage proxy;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.URL;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Proxy {
public static void main(String[] args){
try {
int nThreads=2;
ServerSocket server= new ServerSocket(1234);
Socket client=new Socket("localhost",1234);
final ExecutorService pool= Executors.newFixedThreadPool(nThreads);
while(true){
try {
final httpreque a= new httpreque(client);
client=server.accept();
Runnable b= new Runnable() {
@Override
public void run()
{
}
};
a.run();
} catch (IOException ex) {
client.close();
server.close();
Logger.getLogger(Proxy.class.getName()).log(Level.SEVERE, null, ex);
}
}
} catch (IOException ex) {
}
}
}
package proxy;
import java.io.*;
import java.net.*;
import java.util.StringTokenizer;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.logging.Level;
import java.util.logging.Logger;
public class httpreque implements Executor{
Socket client;
int nThreads;
public httpreque(Socket client){
this.client=client;
}
@Override
public void execute(Runnable r) {
Thread a=new Thread();
a.start();
}
public void run(){
try {
BufferedReader input= new BufferedReader(new InputStreamReader(System.in));
String headerline=input.readLine();
System.out.println(headerline);
StringTokenizer a= new StringTokenizer(headerline);
String end,prot;
URL url;
if(a.nextToken()!="/"){
end=a.nextToken();
end=a.nextToken();
prot=a.nextToken();
url= new URL (end);
String l=url.getHost();
InetAddress address= InetAddress.getByName(url.getHost());
StringTokenizer add= new StringTokenizer(l);
String endhos= address.getHostAddress();
System.out.println("Request for " +endhos);
URLConnection con= url.openConnection();
con.setDoInput(true);
con.setDoOutput(false);
con.connect();//
HttpURLConnection h = (HttpURLConnection) con;
BufferedReader br =new BufferedReader(new InputStreamReader(con.getInputStream()));
StringBuffer newData = new StringBuffer(10000);
String s = "";
while ((s = br.readLine())!= null ) {
newData.append(s);
}
br.close();
PrintStream out = new PrintStream(client.getOutputStream());
String strStatus = h.getResponseMessage() + " (" +h.getResponseCode() + ")";
System.out.println("HTTP Status: " + strStatus);
System.out.println("HTTP Response Headers: ");
for (int i = 1; ; i++)
{
String strKey = h.getHeaderFieldKey(i);
if (null == strKey)
{
break;
}
System.out.println(i + ": " + strKey + ": " + h.getHeaderField(i));
}
h.disconnect();
}
if(input==null)
input.close();
} catch (IOException ex) {
try {
client.close();
Logger.getLogger(httpreque.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex1) {
Logger.getLogger(httpreque.class.getName()).log(Level.SEVERE, null, ex1);
}
}
}
}
e queria por a fixedthreadpool so que nao sei como fazer… alguem ajuda?