# Webserverprogrammierung: Thread-Beschränkung



## snoop83 (31. Jan 2006)

Hi!

Ich bin mir nicht ganz sicher, ob das Thema hier rein gehört. Falls nicht, bitte verschieben!

Ich versuche, mich kurz zu fassen! Ich programmiere einen *Webserver in Java*. Der Server ist bereits lauffähig, *Threadbasierend*, realisiert mit *ServerSocket*.

Initialisierung eines Threads im Hauptprozess:

```
public class Server implements Runnable {
[...]
	public void run() {
		try {
			while (true) {
				Socket client = serverSocket.accept();
				new Server_instance(client).start();
			}
		} catch (Exception e) { e.printStackTrace(); }
	} // run
[...]
}
```

*Server_instance* arbeitet dann die jeweilige Anfrage ab.

Ich habe heute einen Belastungstest durchgeführt: eine Seite mit ca. 80 Bildern parallel von 4 Rechner aus abgefragt. Da mein Server nur ein 400er Pentium mit 128 MB ist, auf dem zusätzlich noch FTP-Server etc. laufen, möchte ich gern, dass der Webserver nur eine bestimmte Anzahl an Anfragen gleichzeitig bearbeitet. Dabei geht es mir um die Beschränkung der gleichzeitigen Festplattenzugriffe.

Habe es in der *run()-Methode der Server_instance* wie folgt versucht:


```
class Server_instance extends Thread {
	public void run() {
		/* solange warten, bis <9 Threads laufend 
		while (this.activeCount()>8) {
			try { Thread.sleep(500); }
			catch ( InterruptedException ie) { }
		}*/
	[...]
[...]
}
```

Somit wird der *Webserver auf maximal 8 Threads gleichzeitig beschränkt*. Das funktioniert auch, allerdings nicht mehr! Sind einmal 8 Threads aktiv, so legen diese sich alle immer und immer wieder schlafen. Was natürlich nicht Sinn der Sache ist, da ja nur bei einer Auslastung von 8 Threads keine neuen gestartet werden sollen. So funktioniert es jedenfalls nicht.

Gibt es andere Lösungsvorschläge?

*Kann man die Threadanzahl eines Java-Programms irgendwie festlegen?* Im Voraus?

Bin für jede Idee zu haben


----------



## Guest (31. Jan 2006)

Siehe http://java.sun.com/developer/JDCTechTips/2004/tt1116.html#2


----------



## meez (31. Jan 2006)

Sowas solltest du sowieso mit einer Queue lösen...
Schreib alle Requests in eine Queue, und arbeite sie mit x Threads ab..
Ueber die Queue kannst du dann auch den "Füllstand" festlegen...


----------

