Browse Source

REPORT-137276 fix: 并发导出下的hashmap死循环问题

bugfix/11.0
Coral.Chen 4 weeks ago
parent
commit
db57a31944
  1. 26
      fine-poi-old/src/main/java/com/fr/third/org/apache/poi/hssf/record/WindowTwoRecord.java
  2. 19
      fine-poi-old/src/main/java/com/fr/third/org/apache/poi/util/BitFieldFactory.java

26
fine-poi-old/src/main/java/com/fr/third/org/apache/poi/hssf/record/WindowTwoRecord.java

@ -39,23 +39,21 @@ public class WindowTwoRecord
private short field_1_options;
// bitfields
private BitField displayFormulas = BitFieldFactory.getInstance(0x01);
private BitField displayGridlines = BitFieldFactory.getInstance(0x02);
private BitField displayRowColHeadings = BitFieldFactory.getInstance(0x04);
private BitField freezePanes = BitFieldFactory.getInstance(0x08);
private BitField displayZeros = BitFieldFactory.getInstance(0x10);
private BitField defaultHeader =
BitFieldFactory.getInstance(0x20); // if false use color in field 4
private static final BitField displayFormulas = BitFieldFactory.getInstance(0x01);
private static final BitField displayGridlines = BitFieldFactory.getInstance(0x02);
private static final BitField displayRowColHeadings = BitFieldFactory.getInstance(0x04);
private static final BitField freezePanes = BitFieldFactory.getInstance(0x08);
private static final BitField displayZeros = BitFieldFactory.getInstance(0x10);
private static final BitField defaultHeader = BitFieldFactory.getInstance(0x20); // if false use color in field 4
// if true use default foreground
// for headers
private BitField arabic =
BitFieldFactory.getInstance(0x40); // for our desert dwelling friends
private BitField displayGuts = BitFieldFactory.getInstance(0x80);
private BitField freezePanesNoSplit = BitFieldFactory.getInstance(0x100);
private BitField selected = BitFieldFactory.getInstance(0x200);
private BitField active = BitFieldFactory.getInstance(0x400);
private BitField savedInPageBreakPreview = BitFieldFactory.getInstance(0x800);
private static final BitField arabic = BitFieldFactory.getInstance(0x40); // for our desert dwelling friends
private static final BitField displayGuts = BitFieldFactory.getInstance(0x80);
private static final BitField freezePanesNoSplit = BitFieldFactory.getInstance(0x100);
private static final BitField selected = BitFieldFactory.getInstance(0x200);
private static final BitField active = BitFieldFactory.getInstance(0x400);
private static final BitField savedInPageBreakPreview = BitFieldFactory.getInstance(0x800);
// 4-7 reserved
// end bitfields

19
fine-poi-old/src/main/java/com/fr/third/org/apache/poi/util/BitFieldFactory.java

@ -19,7 +19,7 @@
package com.fr.third.org.apache.poi.util;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
/**
* Returns immutable Btfield instances.
@ -27,18 +27,11 @@ import java.util.*;
* @author Jason Height (jheight at apache dot org)
*/
public class BitFieldFactory
{
private static Map instances = new HashMap();
public static BitField getInstance(final int mask) {
BitField f = (BitField)instances.get(new Integer(mask));
if (f == null) {
f = new BitField(mask);
instances.put(new Integer(mask), f);
}
return f;
}
public class BitFieldFactory {
private static final ConcurrentHashMap<Integer, BitField> instances = new ConcurrentHashMap<>();
public static BitField getInstance(int mask) {
return instances.computeIfAbsent(mask, k -> new BitField(mask));
}
} // end public class BitFieldFactory

Loading…
Cancel
Save