Wątki a metody statyczne

0

Potrzebuję nieco przyspieszyć swoją aplikację, więc mam szybkie pytanie odnośnie wątków.

Mam klasę konwertera, która zawiera metodę statyczną. Ta przyjmuje plik png i dokonuje konwersji na jpg.
Pytanie brzmi, czy jak kilka wątków w jednym czasie skorzysta z tej metody to będzie to bezpieczne? Czy każdy wątek musi mieć osobną instancje konwertera?

0

A czemu miałoby być bezpiecznie? Kilka wątków zawsze jest niebezpiecznie, chyba że w jakiś sposób zapewni się bezpieczeństwo wątkowe. Na przykład opatrując klasę konwertera adnotacją @ThreadSafe.

Korci mnie, żeby zakończyć wpis, ale to by był niesmaczny żart. Musisz jeszcze zapewnić, żeby klasa faktycznie była thread safe.

0

Czyli jak rozumiem kilka wątków nie może jednocześnie skorzystać chociażby z takiej metody jak poniżej?

public static String toBase64(String text) {

    /// ... operacje zamiany

    return base64String;
}
0

Jeżeli metoda dostaje i zwraca String (immutable) i nie operuje na żadnych polach statycznych to jest bezpiecznie. Metoda statyczna nie jest częścią instancji, więc jeśli sobie zrobisz instancje tego swojego konwertera c1, c2 i będziesz na nich wywoływał metodę statyczną, to będzie to tak czy inaczej ta sama metoda statyczna, co nie ma znaczenia dla ciebie, bo i tak każde wywołanie to osobny call stack i osobne dane.

0

Jeśli ta klasa jest "stateless", czyli pomiędzy wywołaniami nie przechowuje żadnych danych (w postaci pól klasy ani nigdzie indziej) i dodatkowo jeśli nie modyfikuje parametrów które do niej wysyłasz (a najlepiej jeśli te parametry są immutable i zwyczajnie nie da się ich zmienić) to będzie bezpieczne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1