1. Penyebab masalah keamanan utas
Masalah keamanan utas disebabkan oleh variabel global dan variabel statis.
2. Masalah Keselamatan Thread
SedementateFormate sdf = new SimpleDateFormat (); Gunakan sdf.parse (dateStr); sdf.format (tanggal); Ada referensi ke objek CaleAdar di sdf.parse (DataStr); dalam kode sumber, calendar.clear (); dan calendar.getTime (); // Dapatkan waktu kalender
Jika utas A memanggil sdf.parse () dan belum mengeksekusi calendar.getTime () setelah calendar.clear (), Thread B memanggil sdf.parse () lagi, maka Thread B juga mengeksekusi metode SDF.Clear (), yang menyebabkan data kalender Thread A dibersihkan;
Threadlocal menggunakan ruang untuk menukar waktu, disinkronkan menggunakan waktu untuk bertukar ruang
Gunakan ThreadLocal untuk menyelesaikan keamanan utas:
Public Class ThreadLocalDateutil {private static final string date_format = "yyyy-mm-dd hh: mm: ss"; Threadlocal statis pribadi <DateFormat> threadlocal = ThreadLocal baru <DateFormat> (); public static dateFormat getDateFormat () {dateFormat df = threadLocal.get (); if (df == null) {df = new SimpleDateFormat (date_format); threadlocal.set (df); } return df; } public static String formatDate (tanggal tanggal) melempar parseException {return getDateFormat (). format (tanggal); } public static Date parse (String strdate) melempar parseException {return getDateFormat (). parse (strdate); }}Menggunakan solusi yang disinkronkan:
Class Public Datesyncutil {private static SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-mm-dd hh: mm: ss"); format string statis publik (tanggal tanggal) melempar parseException {disinkronkan (sdf) {return sdf.format (date); }} public static Date parse (String strdate) melempar parseException {disinkronkan (sdf) {return sdf.parse (strdate); }}}Terima kasih telah membaca artikel ini, saya harap ini dapat membantu Anda. Terima kasih atas dukungan Anda untuk situs web ini!