olduğu zaman statik nesnesinin genel modifikasyonunu önleyin İki sınıf var, Birinci sınıf (ClassServletA.java), HashMap'te ipaddress ve erişim süresini depolayan HttpServlet'tir, Hash Hash'ı yedeklemek istiyorum Günlük olarak DB, Bu yüzden Görev zamanlama ve statik HashMap nesnesini DB'de saklamak ve HashMap'i (DB'de saklandıktan sonra) yeniden başlatıyorum.Bir iş parçacığı özellikle blok
Statik Nesneyi Global Olarak Kilitlemek Mümkün mü?
public class ClassServletA {
public static Map<String,String> myMap = new HashMap<String, String>();
void doGet(HttpServeltRequest request , HttpServletResponse response){
myMap.put("ipaddress", "accessTime");
}
}
İkinci sınıf zamanlayıcısı:
public class MyDailyTask implements Job {
void executeMethod(){
//Writing the map object to file or database login here
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bos);
out.writeObject(ClassServletA.myMap);
out.flush();
out.close();
// Reinitialize the hashmap
ClassServletA.myMap=new HashMap<String,String>();
}
}
o kilit veya genel olarak zamanlama süre içinde ClassServletA.myMap ilk nesne değişiklik önlemek için mümkün olduğunda zamanlayıcı (MyDailyTask.java) yürütür executeMethod().
İşte aklınıza gelebilecek bir çözüm: 1. İçinde 'boolean' bayrağı bulunan bir 'final' sınıfı oluşturun ve varsayılan olarak 'true' olarak ayarlayın. 2. Bu bayrağı 'executeMethod()' ın başlangıcında 'false 'olarak ayarlayın ve sonunda sıfırlayın. 3. Bu bayrakların değerini, haritayı değiştirdiğiniz her yerde kontrol edin ve sadece bayrak "true" ise değiştirin. – user2004685
, HttpServlet cihazımın trafiği, iş planlanırken HashMap'teki bazı girişleri kaybedecek olursa daha fazla olacaktır. –