Kleines Verständnis Problem -> NIO -> Selector

Status
Nicht offen für weitere Antworten.

Kr0e

Gesperrter Benutzer
Hi, die Methode selectedKeys() von der Klasse Selector ist ja nicht Thread-Sicher. Wie könnte man diese synchronisieren um dies zu erreichen ?

Meine Idee war folgende:

Code:
			       Iterator<SelectionKey> selectedKeys;
			        synchronized(socketSelector)
			        {
			        	selectedKeys = socketSelector.selectedKeys().iterator();
			        }
			        
			       synchronized(selectedKeys)
                               {  
			            while(selectedKeys.hasNext()) 
			           {
                                        //....

Ist das so ok ? Liefert selectedKeys() eine Refernz auf ein Object das intern von Selector verarbeitet wird ? Oder erstellt es ein neues Object jedes mal ?

Ich bin noch nicht ganz mit der Speicherverwaltung von Java verrtaut,... bei C++ war das alles etwas durchschaubarer...
Achja noch eine Frage zu "synchronized" Was genau synchronisiert man da ? Die Referenz oder das Object im Speicher ?
Also ich meine zb. folgendes: Man erstellt 2 Referenzen auf einen Speicherplatz. So nun synchronisiert man eine davon und ändert iwas mit einer MEthode von dem Object. Könnte man nun in einem anderem Thread mit der 2ten Referenz ohne Problem auf das Object zugreifen ? Oder ist der Speicherplatz für weiteren Zugriff gesperrt ?

Grußß Chris
 

Kr0e

Gesperrter Benutzer
Hi, danke erstmal, aber hier synchronisierst du doch auch immer ?!

Code:
// Process any pending selector changes
// this means read/write interests and registrations
synchronized (this.pendingChanges) {

Oder meintest du das im bezug auf SocketSelector ??

Gruß Chris
 
T

tuxedo

Gast
Da synchronisiere ich auf "pendingChanges". D.h. wenn ich irgendwelche regOps ändern will was "schief" gehen könnte, dann mach ich das in den pendingChanges. Und das wird dann am Anfang der schleife gemacht. Das Ergebnis: Änderungen werden "gepuffert" und dann ausgeführt wenn es sicher ist.

- Alex
 

Kr0e

Gesperrter Benutzer
Jetzt im nachhinein weiß ich auf einmal garnicht mehr warum ich den SocketSelector synchronisieren wollte.
Ich glaube mich hat die Bemerkung "Is not thread-safe" gestört. Nagut also du synchronisierst am Anfang die Liste pendingChanges, da sie nicht nur von der run Schleife verwendet wird richtig ?
Nämlich evt auch von public methoden, die in einem anderen Thread ausgefürhrt werden ... Hab ich bishierhin alles richtig verstanden ?

Gurß Chris
 

Kr0e

Gesperrter Benutzer
bzw... die private methoden, die zugriff auf den selector haben, dürfen von keiner public aufgerufen werden nicht war ?
 
T

tuxedo

Gast
Du solltest einen direkten Zugriff auf den Selector außerhalb der run() Methode vermeiden.

Was willst du denn "unbedingt" mit dem Selector von außen anstellen?

- Alex
 

Kr0e

Gesperrter Benutzer
Naja die accept funktion wollte ich als extra methode verwenden, die wird natürlich private...

PS: die methode register vom socketchannel braucht ja den selector, ich werte das mal als "aufruf"
 
T

tuxedo

Gast
Accept und das reagieren auf read und write kannst du alles in der run-methode abhandeln, bzw. aus der run-methode heraus steuern. Und register wird, wenn im verlinkten Sourcecode schaust, auch nur in run() benutzt.

Synchronisieren tu ich dann nur auf meinen "pendingChanges" Puffer. Das bremst zwar auch, aber da der selector häufiger verwendet wird als mein pendingChanges ist das irrelevant.

- Alex
 

Kr0e

Gesperrter Benutzer
JAja so ist das bei mir auch, read, write, accept wird aus der run heraus gestartet.. undzwar NUR aus der run... falls jemand dann mal von meiner Klasse erbt muss er (A) aufpassen diese methoden nicht in einer public zu starten oder (B) ALLES in die run() methode zu packen, was allerdings ziemlich unleserlich wird...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S HTTP Kleines Programm für den Routerneustart Netzwerkprogrammierung 3
H kleines Servlet Problem Netzwerkprogrammierung 2
J Kleines Problem mit Chat Server Netzwerkprogrammierung 2
G Datenautausch Client/Server , hab da ein kleines problem Netzwerkprogrammierung 3
flashfactor Kleines Programmierproblem mit Socket Netzwerkprogrammierung 3
G Problem mit STATIC-Verständnis Netzwerkprogrammierung 8
T Grundlegendes Verständnis Netzwerkprogrammierung 9
I Socket Problem mit den WebSocket Antworten der Discord API Netzwerkprogrammierung 0
K Java Websocketserver Problem | Android to Pi Netzwerkprogrammierung 1
C RMI Produzent-Verbraucher-Problem - Code review Netzwerkprogrammierung 12
B Socket Bilder verschicken via Sockets. Heap-Problem. Netzwerkprogrammierung 2
S Problem bei dem Bluetoothverbindungsaufbau Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
M Netty - TCP Problem Netzwerkprogrammierung 4
L Socket Problem mit Server Netzwerkprogrammierung 1
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
M Problem bei Socket (MultiplayerSpiel) Netzwerkprogrammierung 4
M Socket CDI, Websocket reference Problem ! Netzwerkprogrammierung 2
Shams Problem mit Eventbus in Verbindung mit Server Netzwerkprogrammierung 0
G apache httpClient Problem. Netzwerkprogrammierung 5
H Problem mit ObjectStreams Netzwerkprogrammierung 3
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
D Socket BufferedWriter/Reader Problem Netzwerkprogrammierung 1
Maxim6394 Problem mit Socks5 Implementierung Netzwerkprogrammierung 0
C Handle Connection Problem Netzwerkprogrammierung 3
E HttpUrlConnection Cookie Problem Netzwerkprogrammierung 0
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
O 4Gewinnt Multiplayer - Netzwerk Problem (TCP) Netzwerkprogrammierung 1
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
R Problem beim Programmieren eines Chatprogramms Netzwerkprogrammierung 5
E einfaches Problem: Session-Handling bei Servlets Netzwerkprogrammierung 5
G Problem mit einem FileWatcher Netzwerkprogrammierung 7
T Socket Server starten Thread Problem Netzwerkprogrammierung 12
B Client/Server Connection Problem Netzwerkprogrammierung 2
S Umstellung AS400 auf Postgre - Problem beim Arbeiten mit Metadaten Netzwerkprogrammierung 2
J Facelets Include Rendered Problem Netzwerkprogrammierung 2
J Socket Problem mit C++/Java Netzwerkprogrammierung 20
P Problem mit Datagram-Sockets Netzwerkprogrammierung 2
G Socket NIO2 Problem mit AsynchronousSocketChannel beim Schließen Netzwerkprogrammierung 3
G Cookie Verwaltungs Problem nach Login auf InetSeite (Wo utma-Cookie?) Netzwerkprogrammierung 18
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 7
B Socket Problem mit Netzwerkchat Netzwerkprogrammierung 21
D RMI Problem beim shutdown von verteilter CORBA-Anwendung Netzwerkprogrammierung 6
Maxim6394 ipv6 Problem Netzwerkprogrammierung 2
Maxim6394 Proxyserver Performance Problem Netzwerkprogrammierung 11
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 5
B RMI und Problem mit rmic-Tool Netzwerkprogrammierung 3
C FTP storeFileStream Problem Netzwerkprogrammierung 3
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
D JavaMail - Mailsabrufen Problem (imap) Netzwerkprogrammierung 12
J HTTP Übersetzung yahoo babelfish - Zeichensatz-Problem Netzwerkprogrammierung 6
D Apache CXF, JAX-WS Problem bei Arrays - einfacher Server Netzwerkprogrammierung 2
M Problem beim Datenempfang Netzwerkprogrammierung 2
X Problem mit Server-Client-Kommunikation Netzwerkprogrammierung 14
M Problem mit Socket-Verbindung Netzwerkprogrammierung 2
N NIO Problem beim speziellen Behandeln von einzelnen Benutzern Netzwerkprogrammierung 13
D Thread problem Netzwerkprogrammierung 3
T Servlets JSP: Tomcat Problem Netzwerkprogrammierung 4
K Client - Server Problem Netzwerkprogrammierung 16
T RMI Problem Client-Server Netzwerkprogrammierung 2
P RMI Stub Problem Netzwerkprogrammierung 3
D Socket UDP Übertragungs Problem Netzwerkprogrammierung 7
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 2
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 6
D Problem mit ObjectInputStreams Netzwerkprogrammierung 10
D Socket Problem mit InputStreamReader Netzwerkprogrammierung 3
N CRC32 CheckSum Problem bei UDP Netzwerkprogrammierung 2
V Java Mail Api - IMAP Problem Netzwerkprogrammierung 6
P RMI Problem Netzwerkprogrammierung 4
I Problem bei Outputstreamerzeugung in anderer Klasse als Socket Netzwerkprogrammierung 5
S Socket Problem mit Objektübertragung Netzwerkprogrammierung 16
Shoox Reader / Writer Problem Netzwerkprogrammierung 2
S Problem mit 2 Serversockets unter Win XP Netzwerkprogrammierung 7
P Socket Problem mit Netzwerkverbindung über TCP Netzwerkprogrammierung 12
M RMI - Connection Problem Netzwerkprogrammierung 7
J Socket Client - Server Problem Netzwerkprogrammierung 4
M Socket Chat-Client-Problem Netzwerkprogrammierung 8
D Client Server Problem, Methode readline() löst SocketException "Connection reset" aus Netzwerkprogrammierung 8
E HTTP Problem beim Auslesen von Websiten Netzwerkprogrammierung 6
T Problem bei Findung der richtigen Architektur Netzwerkprogrammierung 3
AlexSpritze Authentication Problem bei WebServices Netzwerkprogrammierung 4
J Socket Problem -Proxies Netzwerkprogrammierung 2
R HTTP Problem bei Authentifizierung über (Http)UrlConnection Netzwerkprogrammierung 2
F Konzept Problem Netzwerkprogrammierung 12
G NIO Sockets Architektur Problem Netzwerkprogrammierung 2
H Neues NIO problem nachricht an alle clients Netzwerkprogrammierung 3
J Client server problem Netzwerkprogrammierung 3
S Problem bzgl. Sockets / Server-Client-Struktur Netzwerkprogrammierung 3
W RMI Problem Netzwerkprogrammierung 4
M Problem mit Server Netzwerkprogrammierung 5
N Socket Java server c# client problem Netzwerkprogrammierung 7
Y Problem mit ObjectInputStream beim lesen vom Socket Netzwerkprogrammierung 10
R RMI Hibernate Problem Netzwerkprogrammierung 4
Z RMI Problem Netzwerkprogrammierung 11
F RMI problem mit RMI Netzwerkprogrammierung 3
H Object Cast Problem nach Übertragung mit Log4j Netzwerkprogrammierung 5
H Log4j SocketAppender Problem Netzwerkprogrammierung 2
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4
P Problem mit JOscarLib Netzwerkprogrammierung 6

Ähnliche Java Themen


Oben