是否有解决此死锁的解决方案?

时间:2018-11-27 11:46:06

标签: java

下面是代码。

Gregorian variable definition

The circled content in the attached screenshots indicate the error highlighted in yellow on the logs shown below.

我在Java中使用了Gregorian日历类来初始化日历变量,并使用cal.add()方法等操作日期值。

这是在日志中收到的错误:

"http-100.20.2.40-8080-6" - Thread t@247
   java.lang.Thread.State: BLOCKED
    at java.util.SimpleTimeZone.getOffsets(SimpleTimeZone.java:533)
    - waiting to lock <6ed79c47> (a java.util.SimpleTimeZone) owned by "http-100.20.2.40-8080-1" t@223
    at java.util.SimpleTimeZone.getOffset(SimpleTimeZone.java:522)
    at java.util.SimpleTimeZone.inDaylightTime(SimpleTimeZone.java:834)
    at sun.util.calendar.ZoneInfo.getOffsets(ZoneInfo.java:282)
    at sun.util.calendar.ZoneInfo.getOffsets(ZoneInfo.java:225)
    at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2024)
    at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:1996)
    at java.util.Calendar.setTimeInMillis(Calendar.java:1110)
    at java.util.GregorianCalendar.add(GregorianCalendar.java:999)
    at 
  

com.thrasys.xnet.erp.ordering.manager.OrderTimingManager.CalculateIntraDayTimes(OrderTimingManager.java:640)

    at com.thrasys.xnet.erp.ordering.manager.OrderTimingManager.GetRepeatTimesArray(OrderTimingManager.java:489)
    at com.thrasys.xnet.erp.ordering.manager.OrderTimingManager.HandleOrderOccurrences(OrderTimingManager.java:58)

即使使用了singleton类,我也得到了一个线程转储。 直到昨天,代码一直可以正常运行。突然之间,出现了僵局。

是因为JVM时区和DB时区不同吗?

JDK版本:1.6.45。

1 个答案:

答案 0 :(得分:0)

java.time

  

有什么方法可以解决此处创建的僵局吗?

是的。

您使用的是可怕的旧日期时间类,而该类早已采用JSR 310

ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;

System.out.println( zdt ) ;  // Generate text representing this value in standard ISO 8601 format.

Locale locale = new Locale( "ar" , "TN" ) ; // Arabic language, Tunisia cultural norms.
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL ).withLocale( locale ) ;
String output = zdt.format( f ) ;  // Generate text describing this moment in a localized format.

关于 java.time

java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendarSimpleDateFormat

目前位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

在哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore