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个呢?

2019-06-14 提问
4 个回答
1

已采纳

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

0

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

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

0

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

0

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

撰写答案

推广链接