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

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

阅读 3.4k
4 个回答

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

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

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

新手上路,请多包涵

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题