Inilah model yang saya terapkan:
public class LoginSession {
private static final Gson gson = new Gson();
private String id;
private String name;
private long timestamp;
public LoginSession(String id, String name) {
this.id = id;
this.name = name;
this.timestamp = System.currentTimeMillis();
}
public String toJson() {
return gson.toJson(this);
}
public static LoginSession fromJson(String json) {
checkArgument(!isNullOrEmpty(json));
return gson.fromJson(json, LoginSession.class);
}
}
Saya pikir tidak ada gunanya membuat instance Gson baru untuk setiap instance LoginSession.
Tapi yang saya khawatirkan adalah masalah keamanan benang. Sekitar 1000+ instance / detik akan dibuat.
Apakah tidak masalah menggunakan instance Gson sebagai bidang statis?
Terima kasih atas saran / koreksi apapun.
java
static
thread-safety
gson
philipjkim.dll
sumber
sumber
Kelas inti
Gson
aman untuk thread. Saya baru saja mengalami masalah keamanan utas yang seharusnya terjadi pada GSON. Masalahnya terjadi saat menggunakan kustomJsonDeserializer
danJsonSerializer
untukDate
penguraian dan pemformatan. Ternyata, masalah keamanan thread adalah penggunaan metode saya atasSimpleDateFormat
instance statis yang tidak aman untuk thread. Setelah saya membungkus statisSimpleDateFormat
dalam sebuahThreadLocal
contoh, semuanya bekerja dengan baik.sumber
Menurut komentar pengujian unit yang ada tidak terlalu banyak menguji, berhati-hatilah dengan apa pun yang berkaitan dengan keamanan utas ...
Ada tes unit yang memeriksa keamanan benang:
/** * Tests for ensuring Gson thread-safety. * * @author Inderjeet Singh * @author Joel Leitch */ public class ConcurrencyTest extends TestCase { private Gson gson; ...
Anda mungkin bertanya-tanya apakah pengujian unit ini cukup untuk menemukan setiap kemungkinan masalah pada setiap konfigurasi mesin yang memungkinkan? Ada komentar tentang ini?
Ada juga kalimat ini di dokumen :
sumber
Kami memiliki masalah dengan keamanan utas beberapa waktu lalu dan kami menyelesaikannya dengan menggunakan FastDateFormat di apache commons.
Baru saja membuat Tautan inti untuk Gist seputar ini untuk membantu orang-orang yang bertanya-tanya apakah instance Gson dapat digunakan kembali. Mereka tidak memiliki setter dan semua vars bersifat pribadi.
Jadi selain masalah SimpleDateFormat, saya tidak melihat mereka mempertahankan status di tempat lain.
Apakah memeriksa itu keluar. Ini adalah pertama kalinya saya membalas salah satu dari ini. Senang memberi kembali untuk sekali. :)
sumber