quick-media
quick-media copied to clipboard
线程不安全
多线程下会出现ArrayIndexOutOfBoundsException或者null的一些问题
除了自己加锁,能否有其他方式处理
代码如下
String md = "## hashicorp/consul-k8s\r\n## ";
for (int i = 0; i < 4; i++) {
new Thread(() -> {
try {
MarkdownEntity entity = MarkDown2HtmlWrapper.ofContent(md);
BufferedImage bf = Html2ImageWrapper.ofMd(entity)
.setW(800)
.setAutoW(false)
.setAutoH(true)
.setOutType("jpg")
.setFontFamily("微软雅黑")
.build()
.asImage();
String jpg = Base64Util.encode(bf, "jpg");
System.out.println("data:image/jpeg;base64," + jpg);
} catch (Exception e) {
throw new RuntimeException(e);
}
}).start();
bug表现形式:
Exception in thread "Thread-3" java.lang.RuntimeException: java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 32
at com.huice.tm.deploytest.service.impl.Test.lambda$main$0(Test.java:37)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 32
at org.apache.xerces.dom.DeferredDocumentImpl.getChunkIndex(Unknown Source)
at org.apache.xerces.dom.DeferredDocumentImpl.appendChild(Unknown Source)
at org.apache.xerces.parsers.AbstractDOMParser.startElement(Unknown Source)
at org.cyberneko.html.HTMLTagBalancer.callStartElement(HTMLTagBalancer.java:1164)
at org.cyberneko.html.HTMLTagBalancer.startElement(HTMLTagBalancer.java:754)
at org.cyberneko.html.HTMLTagBalancer.forceStartElement(HTMLTagBalancer.java:778)
at org.cyberneko.html.HTMLTagBalancer.startElement(HTMLTagBalancer.java:650)
at org.cyberneko.html.HTMLTagBalancer.forceStartElement(HTMLTagBalancer.java:778)
at org.cyberneko.html.HTMLTagBalancer.startElement(HTMLTagBalancer.java:614)
at org.cyberneko.html.HTMLTagBalancer.forceStartElement(HTMLTagBalancer.java:778)
at org.cyberneko.html.HTMLTagBalancer.forceStartBody(HTMLTagBalancer.java:851)
at org.cyberneko.html.HTMLTagBalancer.endDocument(HTMLTagBalancer.java:483)
at org.cyberneko.html.filters.DefaultFilter.endDocument(DefaultFilter.java:213)
at org.cyberneko.html.HTMLScanner$ContentScanner.scan(HTMLScanner.java:2168)
at org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:920)
at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:499)
at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:452)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
at com.github.hui.quick.plugin.md.Html2ImageWrapper.parseDocument(Html2ImageWrapper.java:47)
at com.github.hui.quick.plugin.md.Html2ImageWrapper.access$000(Html2ImageWrapper.java:24)
at com.github.hui.quick.plugin.md.Html2ImageWrapper$Builder.build(Html2ImageWrapper.java:295)
at com.huice.tm.deploytest.service.impl.Test.lambda$main$0(Test.java:31)
... 1 more
Exception in thread "Thread-1" java.lang.RuntimeException: java.lang.NullPointerException
at com.huice.tm.deploytest.service.impl.Test.lambda$main$0(Test.java:37)
at java.base/java.lang.Thread.run(Thread.java:834)