Toon posts:

[java] luisteren naar twee events in 1 thread

Pagina: 1
Acties:

Verwijderd

Topicstarter
(Nog steeds voor school ja :P)

Stel nu dat ik een netwerkconnectie opzet en ik wil zowel luisteren naar events vanuit het netwerk (die data read() ik dus) alswel vanuit events vanuit een ander deel van de applicatie (die dus een write() richting het netwerk triggeren), en ik wil dat allemaal in 1 thread doen. Kan dat :?

Ietsje meer detail: ik heb dus een server applicatie in java die moet communiveren met applets, en deze server kan dus soms data naar de applet willen sturen alswel data vanuit de applet ontvangen, en elke applet krijgt dus momenteel 1 eigen thread in de server (en dat wil ik graag zo houden - anders kost het zoveel systeem resources :Y)).

Probleem: als ik simpelweg read() doe op het netwerk, dan kan ik dus niet write()'en, en als ik dus een thread-model gebruik waarmee ik wacht op events vanuit de rest van de server dan krijg ik dus geen data binnen via read() als er data is... Is er een manier om een event te triggeren zodra er data is (vanuit het netwerk) oid :?

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

is dat een standaard systeem read?
anders zou je kunnen proberen een non-blocking read te maken
of denk ik te simpel?

Doet iets met Cloud (MS/IBM)


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09-09 20:58

Janoz

Moderator Devschuur®

!litemod

Hier kun je beter gewoon 2 simpele threads van maken. ALs je dit anders op gaat lossen ben je uiteindelijk zelf bezig om threading te implementeren wat uiteindelijk ook zo zijn gevolgen heeft voor de performance.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Op donderdag 28 maart 2002 11:56 schreef D2k het volgende:
is dat een standaard systeem read?
anders zou je kunnen proberen een non-blocking read te maken
of denk ik te simpel?
Ben ik dan niet in een soort while(1) { read(); } bezig :? In unix heb ik bijvoorbeeld de mogelijkheid om aan de filedescriptor een event mee te geven die dus een functie triggered zodra er data is. Als ik dus die event dezelfde maak als de event die getriggered wordt door de applicatie zelf als ik data wil schrijven dan ben ik dus heel efficient bezig, zoiets zou ik hier ook graag zien (if possible)...

Verwijderd

Topicstarter
Op donderdag 28 maart 2002 11:57 schreef Janoz het volgende:
Hier kun je beter gewoon 2 simpele threads van maken. ALs je dit anders op gaat lossen ben je uiteindelijk zelf bezig om threading te implementeren wat uiteindelijk ook zo zijn gevolgen heeft voor de performance.
gezien het aantal reacties vrees ik dat je gelijk gaat krijgen ;)

Dan maar twee threads :{

Verwijderd

[b]Op donderdag 28 maart 2002 11:54 schreef
- anders kost het zoveel systeem resources :Y)).
Hoezo kost dat veel aan resources? De JVM maakt toch de threads aan... Als je resources wilt besparen zou ik sowieso gaan zoeken naar een andere taal ... C/C++ (Ik neem ff aan dat je op Linux zit, omdat ik je ook vaak bij non windows zie)....

De JVM neemt juist veel resources in gebruik... 1 threadje meer of minder zal weinig uitmaken ;)

Verwijderd

Topicstarter
Op donderdag 28 maart 2002 20:03 schreef razor_harm het volgende:

[..]

Hoezo kost dat veel aan resources? De JVM maakt toch de threads aan... Als je resources wilt besparen zou ik sowieso gaan zoeken naar een andere taal ... C/C++ (Ik neem ff aan dat je op Linux zit, omdat ik je ook vaak bij non windows zie)....

De JVM neemt juist veel resources in gebruik... 1 threadje meer of minder zal weinig uitmaken ;)
Da's ook weer waar. 't Gaat inderdaad onder linux draaien maar 't is voor iets van school en de leraar kan geen c/c++ dus dat mag niet :'( (anders was het al lang af :P). Dus vandaar java. Maargoed, dan maar een threadje extra :Y)

  • Stephan Oudmaijer
  • Registratie: Oktober 2000
  • Laatst online: 16-08-2023
sterker nog het kan alleen als je 2 threads gebruikt..

wil je bijvoorbeeld lezen en schrijven dan kan het wel met een thread maar dan blok je een van de 2. Als je leest kan je niet schrijven. voorbeeld van 1 thread:


class EenThread extends Thread
{
Socket s;
BufferedInputStream in;
OutputStream out;
String r;

public EenThread()
{
Socket s = new Socket(...);
s.open(...);

in = new BufferedInputStream( s.getInputStream() );
out = s.getOutputStream();

start();
}

public void run()
{
while( (s=in.readLine()) != null )
{
doeIetsMetInput( s );
}
}

public void doeIetsMetInput( String input )
{
// doe iets?
out.print("reply");
}
}

dat is met een thread maar dan kan je niet schrijven en lezen tegelijk..

ps: uit m`n hoofd dus niet zeuren als de code niet klopt :)

Verwijderd

Topicstarter
Haha, hoe je een thread maakt wist ik inmiddels al wel :P

/me is geen java beginner meer :7 </arrogant>

Leuker vraagje dan: kan ik in een cleane manier in 1 class twee threads maken :? Of moet ik daarvoor twee aparte classes gebruiken :? Of een lelijke if/else constructie in public void run() :{....

  • Stephan Oudmaijer
  • Registratie: Oktober 2000
  • Laatst online: 16-08-2023
Op donderdag 28 maart 2002 22:07 schreef beelzebubu het volgende:
Haha, hoe je een thread maakt wist ik inmiddels al wel :P

/me is geen java beginner meer :7 </arrogant>

Leuker vraagje dan: kan ik in een cleane manier in 1 class twee threads maken :? Of moet ik daarvoor twee aparte classes gebruiken :? Of een lelijke if/else constructie in public void run() :{....
kan in 1 file maar wel 2 classes nodig :) Sorry als ik voor jou newbie code neerzet maar ik wist niet dat je al een bikkel was :P

Verwijderd

Topicstarter
Op donderdag 28 maart 2002 22:11 schreef CK het volgende:

[..]

kan in 1 file maar wel 2 classes nodig :) Sorry als ik voor jou newbie code neerzet maar ik wist niet dat je al een bikkel was :P
[NOS mode]
choeso jei!
[/NOS mode]

Mjah, twee classes zelfs.... Ik ga bijna geloven dat java niet perfect is.... >:) :P
Pagina: 1