Skip to content

线程不安全 #121

@Jarome07

Description

@Jarome07

多线程下会出现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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions