Gson taking a lock on SimpleDateFormat
- 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
Assessment
This issue has not been assessed yet.