---
title: "Bättre sätt att ta emot data"
type: "forum-thread"
url: "https://www.webforum.nu/amne/java/117459-bättre-sätt-att-ta-emot-data"
topic: "Java"
topic_url: "https://www.webforum.nu/amne/java"
author: "nitro2k01"
published: "2004-12-06T12:38:11.000Z"
updated: "2004-12-06T14:05:37.000Z"
replies: 2
views: 265
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/java/117459-bättre-sätt-att-ta-emot-data"
---

# Bättre sätt att ta emot data

## #1 — nitro2k01, 2004-12-06T12:38Z

Jag har följande kod för att läsa input från en DataInputStream.

```
while(true){
	try{
	  	dtClientConsole.outWrite(
			inputStream.readUTF()
		);
	}catch(IOException e){
		Thread.yield();
	}
}
```

Problemet är att denna kod tar upp för mycket CPU-kraft. Trots att jag kör Thread.yield(); (Den kallas oftast eftersom det i de allra flesta fallen inte finns någon data att läsa.) och har prövat att sätta trådens prioritet till lägsta, så tar den fortfarande lika mycket CPU.
dtClientConsole är en instans av en klass som jag har skrivit för att skriva till konsolen, och den är inte orsaken. (Jag har prövat att sätta inputStream.readUTF(); ensamt med samma resultat.)

Jag undrar om det finns något sätt att låta tråden sova tills det kommer nätverksdata?
Det är viktigt att datan tas emot direkt när den kommer, för jag vill undvika latency, men tycker samtidigt att det verkar dumt att vänta i en while(true)-loop. ("Dumbloop" som det kallas.)

Förslag?

Permalänk: https://www.webforum.nu/p/117459

## #2 — spango, 2004-12-06T13:24Z

Konstigt. java.io-paketet kör bara med blocking I/O, readUTF borde blocka tills den läst ett tecken.

Permalänk: https://www.webforum.nu/p/1500256

## #3 — Viktor, 2004-12-06T14:05Z

Vet inte om det hjälper något men eftersom jag ändå sitter och jobbar med nätverk just nu så kan jag ju slänga in min kod (moddad för dig) som jag alltid använder när jag behöver en lysnare på en socket,

```
class KAlle
{
	public static void main(String args[])
	{
		//öppna socket osv
		Listen l=new Listen();
		l.start();
	}

	class Listen extends Thread
	{
		public void run()
		{
			try
			{
				String line="";
				while((line=inputStream.readUTF())!=null)
				{
					dtClientConsole.outWrite(line);
				}
			}
			catch(IOException io)
			{
				io.printStackTrace();
			}
		}
	}
}
```

/Viktor

Permalänk: https://www.webforum.nu/p/1500276

---

Tråden på webben: https://www.webforum.nu/amne/java/117459-bättre-sätt-att-ta-emot-data
