» »

Java, nekaj vprašanj glede sinhronizacije

Java, nekaj vprašanj glede sinhronizacije

l0g1t3ch ::

Delam en mini strežnik v javi, ki bo stregel nekaj clientov. Zadeva lepo napreduje pojavilo pa se mi je nekaj vprašanj in sicer

1) Če 2 ali več niti kličejo neko metodo, ki operira samo nad argumenti in lokalnimi spremenljivkami metode potem tu ni kaj skrbet za sinhronizacijo in do težav ne more priti. Je to res ?

2) Te metode, kot je opisana zgoraj imam v svojem razredu Utils zanima me pa najbolši/najbolj pravilen dostop do njih in sicer
a) metode so statične, to imam sedaj
b) naredim nestatične metode in potem instanco objekta, referenco na ta objekt potem podam vsaki niti ob njenem zagonu
c) v vsaki niti posebej kreiram instanco tega razreda Utils

3) So med temi tremi načini kakšne razlike glede potrebe po sinhronizaciji, predidevam sicer da ne

4) Povezava na bazo, kako ?
a) vsaka nit naredi svojo povezavo na bazo, verjetno me to reši težav s sinhronzacijo ker bi za to poskrbela baza
b) ena povezava na bazo, niti izvajajo poizvedbe preko sinhrinoziranih metod

Hvala za vse odgovore

Tr0n ::

1. Naceloma ne oz. odvisno od argumentov, ki jih podajas. Ponavadi tak utils class (ce je pravilno napisan) ne pozna specifik razredov, ki ga klicejo, ampak samo opravi neko nalogo, vrne rezultat in to je to. Cisti dumb utils pac.

2. Ponavadi se uporabljajo staticne metode. Ce je pa kaj bolj specificnega oz. mora razred upravljat se kaj vec pa ga lahko naredis tudi kot singleton, tako da imajo vsi threadi samo eno in isto instanco razreda.

4. Pri bazi se ponavadi uporablja kak connection pool z cashingom povezav, da jih ne odpiras vedno znova. Zelo odvisno od aplikacije in kaj potrebujes.

Zgodovina sprememb…

  • spremenilo: Tr0n ()

l0g1t3ch ::

1. Ta Utils class je spisan tako, da nimam nobenih svojih polj in ne ve nic o razredih. Sestavljajo ga samo funkcije, ki prejmejo nekaj preko parametrov ob klicu in na koncu klica vrnejo rezultat.
Tako da glede na tvoj odgovor sklepam da tu ni potrebe po sinhronizaciji.

2. Bom pustil statično

4. Zaenkrat bom obdražl eno povezavo in delo preko sinhroniziranih metod. Če bo potreba pa naprej.
Sej ta connection pool verjetno ni drugega kot da recmo narediš nekaj povezav na bazo potem pa posameznim threadom dodeljuješ te povezave. Pa skrbiš dako se thread konča da sprosti povezavo oz. ko so vse povezave zasedene mora thread počakat.

l0g1t3ch ::

Še nekaj vprašanj in sicer

Niti ki se pogovoarjajo z klienti morajo brati neke podatke iz datoteke. Sedaj pa me zanima če v vsaki niti kreiram FileInputStream in z njim berem to datoteko ali lahko tu nastopijo kake težave ? Sicer se mi zdi da ne ker samo berem me pa vseeno zanima.

Ko rečem
new ClientHandler( ss.accept() );
in se nit požene potem ta nit deluje preko drugega porta, kot je port na katerem poslušam za povezave
final ServerSocket ss = new ServerSocket( 8080 );

Pravzaprav vsaka nit uporablja drugacen port in če prav razumem so potem niti kar se tiče pisanja in branja iz socket-a povsem neodvisne druga od druge ?


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Java] Multi Client chat server

Oddelek: Programiranje
262558 (1829) javaMaster
»

[JAVA] zaustavitev niti (threadov)

Oddelek: Programiranje
223196 (3196) morbo
»

[Java] pošiljanje slik prek porta

Oddelek: Programiranje
51218 (1137) xlarge
»

[C++] for {}

Oddelek: Programiranje
291732 (1426) Gundolf
»

Kako pošiljanje datotek v JAVI.

Oddelek: Programiranje
141851 (1722) kopernik

Več podobnih tem