#vulnerable code 
                             public void removeRows(int[] rows) {
		PrintWriter stdout1 = new PrintWriter(BurpExtender.callbacks.getStdout(), true);
		synchronized (configEntries) {
			//because thread let the delete action not in order, so we must loop in here.
			//list length and index changed after every remove.the origin index not point to right item any more.
			Arrays.sort(rows); //升序
			for (int i=rows.length-1;i>=0 ;i-- ) {//降序删除才能正确删除每个元素
				String key = configEntries.get(rows[i]).getKey();
				this.fireTableRowsDeleted(rows[i], rows[i]);
				configEntries.remove(rows[i]);
				stdout1.println("!!! "+key+" deleted");
				//this.fireTableRowsDeleted(rows[i], rows[i]);
			}
		}

	} 
                            #location 3 
                            #vulnerability type THREAD_SAFETY_VIOLATION
#fixed code
                             public void removeRows(int[] rows) {
		PrintWriter stdout1 = new PrintWriter(BurpExtender.callbacks.getStdout(), true);
		synchronized (configEntries) {
			//because thread let the delete action not in order, so we must loop in here.
			//list length and index changed after every remove.the origin index not point to right item any more.
			Arrays.sort(rows); //升序
			for (int i=rows.length-1;i>=0 ;i-- ) {//降序删除才能正确删除每个元素
				String key = configEntries.get(rows[i]).getKey();
				this.fireTableRowsDeleted(rows[i], rows[i]);
				configEntries.remove(rows[i]);
				stdout1.println("!!! "+key+" deleted");
				this.fireTableRowsDeleted(rows[i], rows[i]);
			}
		}

	}