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个呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
在run最开始输出一个信息,才能确定线程数。因为在最后才输出,有可能run执行中间发生 异常,后面就不会再输出。
删掉处理业务的代码可以发现启动三个线程是没有问题的.
原因可能是你的业务代码中产生了异常导致程序退出或者业务代码没有执行完毕.因为你是在执行完业务之后才打印日志的.
run方法抛异常了,你在run方法里面try catch一下看看
byte[] b1 =TestMethod.image2Bytes("E:\img\test.png");
long begin = System.currentTimeMillis();
这两行代码换下,你读取图片也费时间的,你整个执行的时间,应该是超过你sleep的时间了