1. Causas de problemas de segurança de threads
Os problemas de segurança dos threads são causados por variáveis globais e variáveis estáticas.
2. Problemas de segurança de tópicos
SimpledateFormate sdf = new SimpleDateFormat (); Use sdf.parse (DATEST); sdf.format (data); Há uma referência ao objeto CaleArt em sdf.parse (DATEST); No código -fonte, calendar.clear (); e calendário.gettime (); // Obtenha o tempo do calendário
Se o thread A Chamadas Sdf.parse () e ainda não executou calendário.gettime () após calendário.clear (), o thread B chama sdf.parse () novamente, então o Thread B também executa o método sdf.clear (), que causa os dados do calendário do Thread A;
Threadlocal usa espaço para trocar tempo, o sincronizado usa tempo para trocar espaço
Use Threadlocal para resolver a segurança do thread:
classe pública threadlocaldateUtil {private static final string date_format = "yyyy-mm-dd hh: mm: ss"; Inserir Threadlocal <dateFormat> threadlocal = new ThreadLocal <DeatFormat> (); public static dateFormat getDateFormat () {dateFormat df = threadlocal.get (); if (df == null) {df = new SimpleDateFormat (date_format); threadlocal.set (df); } retornar df; } public static string formatdate (data) lança parseexception {return getDateFormat (). formato (data); } Public Static Date Parse (String strdate) lança parseException {return getDateFormat (). parse (strdate); }}Usando solução sincronizada:
classe pública datesyncutil {private static simpledateFormat sdf = new SimpleDateFormat ("yyyy-mm-dd hh: mm: ss"); public static string formatdate (data date) lança parseexception {sincronizado (sdf) {return sdf.format (date); }} public date static parse (string strdate) lança parseexception {sincronizado (sdf) {return sdf.parse (strdate); }}}Obrigado por ler este artigo, espero que possa ajudá -lo. Obrigado pelo seu apoio a este site!