Avatar billede kernelx Juniormester
15. april 2017 - 18:25 Der er 2 kommentarer og
1 løsning

read acces paa non-final fields med flere threads

Hi,

jeg har en java class:
---
public class Foo {
    private String name;
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
}
---

Jeg har JSON-data:
---
{
    "name": "foobar"
}
---

Nu skal Jackson-Framework create en ny instance of class Foo.
Det sker ved at Jackson kalder empty constructor paa Foo og saa kalder methoden setName("foobar").

Efter at jeg har denne instance er der flere threads som laeser name-property med getName(). Der er ingen code som kalder setName() efter at Jackson har created min foo instance.

Mit problem er at Jackson-framework har brug for setName() methoden. Saa min name-property kan ikke vaere final.

Vil der komme concurency problemer, hvis to threads laeser samtidig getName()?
Avatar billede arne_v Ekspert
15. april 2017 - 19:33 #1
Der kan ikke vaere concurrency problemer mellem 2 traade som laeser samtidigt.

Der kan vaere et concurrency problem mellem den traad som initialiserer via Jackson og en ande traad som laeser. Under visse omstaendigheder kan laese traaden ikke se den vaerdi som er sat af initlaliserings traaden.
Avatar billede kernelx Juniormester
16. april 2017 - 13:02 #2
hvis der ikke kan vaere problemer med to threads som samtidig laeser, saa har jeg ingen problemer :-)

Mange tak for svaret.
Jeg har lang tid siden ikke vaeret her. Er der ingen points laengere?
Avatar billede arne_v Ekspert
16. april 2017 - 15:17 #3
Ja. Point forsvandt med den nye version af Eksperten.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester