Network Security Internet Technology Development Database Servers Mobile Phone Android Software Apple Software Computer Software News IT Information

In addition to Weibo, there is also WeChat

Please pay attention

WeChat public account

Shulou

Why is the thread unsafe when using SimpleDateFormat?

2025-01-19 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Internet Technology >

Share

Shulou(Shulou.com)06/02 Report--

In order to solve the problem of thread unsafety when using SimpleDateFormat, this article introduces the corresponding analysis and solution in detail, hoping to help more partners who want to solve this problem to find a more simple and easy way.

An example is given to describe the failure of SimpleDateFormat to process data as expected in the case of multithreading.

Use the thread pool to execute the task, adding the number of days of the date by 1 at a time. In the case of multithreading, the result is not the expected value.

Public class SimpleDateFormatInMultiThread {private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss"); private static ThreadFactory namedThreadFactory = new ThreadFactoryBuilder (). SetNameFormat ("demo-pool-%d"). Build (); private static ExecutorService pool = new ThreadPoolExecutor (5,200,90L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue (1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy ()); private static CountDownLatch countDownLatch = new CountDownLatch (50) / * how to solve the problem of SimpleDateFormat thread unsafety * 1 using local variables * 2 and synchronization locks alone in threads * 3 using threadlocal using independent thread objects * 4 using DateTimeFormat in java8 instead of * * @ param args * @ throws InterruptedException * / public static void main (String [] args) throws InterruptedException {Set dates = Collections.synchronizedSet (new HashSet ()) For (int I = 0; I {countDownLatch.countDown (); calendar.add (Calendar.DATE, finalI); String dateString; synchronized (simpleDateFormat) {dateString = simpleDateFormat.format (calendar.getTime ());} dates.add (dateString);});} countDownLatch.await () System.out.println (dates.size ());}}

If there are element duplicates in the collection, how to avoid data inconsistencies?

1 use the synchronization keyword synchronized to lock concurrent statements

2 use independent variables

3 use ThreadLocal to assign format objects that do not affect each other to each thread

4 formatted with thread-safe classes, DateTimeFormat classes are provided in java8

This is the answer to the question about why there is thread unsafety in the use of SimpleDateFormat. I hope the above content can be of some help to you. If you still have a lot of doubts to be solved, you can follow the industry information channel for more related knowledge.

Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.

Views: 0

*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.

Share To

Internet Technology

Wechat

© 2024 shulou.com SLNews company. All rights reserved.

12
Report