google / google/gson

Gson taking a lock on SimpleDateFormat

Open
#1,726 4 comments 2 reactions 0 assignees View on GitHub
enhancement
Dominant language
Java
Stars
24.2k
Forks
4.5k
Avg merge
6d 4h
Merged PRs (30d)
12

Description

While debugging a problem in our service, I noticed that `Gson` is using `SimpleDateFormat`. While doing that, it is taking a lock that causes other threads using that same instance of Gson to block...

```
2020-06-22_19:00:26.64218 java.lang.Thread.State: BLOCKED (on object monitor)
2020-06-22_19:00:26.64218 at com.google.gson.DefaultDateTypeAdapter.serialize(DefaultDateTypeAdapter.java:71)
2020-06-22_19:00:26.64218 - waiting to lock <0x00000000d016dc68> (a java.text.SimpleDateFormat)
2020-06-22_19:00:26.64219 at com.google.gson.DefaultDateTypeAdapter.serialize(DefaultDateTypeAdapter.java:37)
2020-06-22_19:00:26.64219 at com.google.gson.internal.bind.TreeTypeAdapter.write(TreeTypeAdapter.java:81)
2020-06-22_19:00:26.64220 at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69)
2020-06-22_19:00:26.64220 at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:125)
2020-06-22_19:00:26.64220 at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:243)
2020-06-22_19:00:26.64221 at com.google.gson.Gson.toJson(Gson.java:669)
2020-06-22_19:00:26.64221 at com.google.gson.Gson.toJson(Gson.java:648)
2020-06-22_19:00:26.64221 at com.google.gson.Gson.toJson(Gson.java:603)
2020-06-22_19:00:26.64221 at com.google.gson.Gson.toJson(Gson.java:583)
```

41 threads waiting on that lock....

```
$ grep -c 'waiting to lock <0x00000000d016dc68>' /opt/app/log/current
41
```
This is with gson-2.8.0

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.