java循环启动线程,启动线程数不正确

发布于 2022-09-11 20:28:10 字数 864 浏览 21 评论 0

通过for循环需启动3个线程。结果只有两个有结果。(结果不正确时,Thread.sleep(5000)无效)

    public static void main(String[] args) throws Exception {
        for (int i=0 ;i<3;i++){
            new TestJNIThread().start();
        }
        Thread.sleep(50000);
    }
public class TestJNIThread extends Thread {


    @Override
    public void run() {
    //通过JNI调用dll文件执行图片裁剪
        byte[] b1 =TestMethod.image2Bytes("E:\\img\\test.png");
        long begin = System.currentTimeMillis();
        int resultKey = JniMethod.image_crop_0(b1,3,10,4,3);
        byte[] resultImgeByte = leaiapidep.get_data_0(resultKey);
        long time = System.currentTimeMillis()-begin;
        System.out.println(time);
    }
}

以上代码,当我多次点击RUN运行后,会打印出:
15
15
(当打印结果不正确时,main方法中的Thread.sleep(50000)没有生效)
明明for运行i=0;i<3 为什么有时候会只有2个呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

明天过后 2022-09-18 20:28:10

在run最开始输出一个信息,才能确定线程数。因为在最后才输出,有可能run执行中间发生 异常,后面就不会再输出。

转身泪倾城 2022-09-18 20:28:10

删掉处理业务的代码可以发现启动三个线程是没有问题的.

原因可能是你的业务代码中产生了异常导致程序退出或者业务代码没有执行完毕.因为你是在执行完业务之后才打印日志的.

面犯桃花 2022-09-18 20:28:10

run方法抛异常了,你在run方法里面try catch一下看看

叫嚣ゝ 2022-09-18 20:28:10

byte[] b1 =TestMethod.image2Bytes("E:\img\test.png");
long begin = System.currentTimeMillis();
这两行代码换下,你读取图片也费时间的,你整个执行的时间,应该是超过你sleep的时间了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文