我们现在在做一个项目,里面的内容就是通过硬件在黑暗的地方拍照,然后进行图像分析。
我们原先的思维逻辑是:4s曝光时间,曝光完成后拍照进行1s图像计算;但是,甲方忽然提出想要将曝光时间延长到5s,但是图像计算的1s放到另外一个线程中。所以,做出了如下的实验研究。
研究方式:在应用中开启两个线程,然后在线程中进行测试。
package com.wangy.jnilearning;
import android.os.Bundle;
import android.util.Log;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.blankj.utilcode.util.LogUtils;
public class ThreadActivity extends AppCompatActivity {
int i = 0;
int j = 0;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_thread);
long currentTime = System.currentTimeMillis();
// 获取当前得时间
Thread thread1 = new Thread() {
@Override
public void run() {
super.run();
LogUtils.e("current i = " + i);
while ( true ) {
if (System.currentTimeMillis() < currentTime + 4000) {
i++;
} else {
LogUtils.e("current i = " + i);
return;
}
}
}
};
thread1.start();
Thread thread2 = new Thread() {
@Override
public void run() {
super.run();
LogUtils.e("current j = " + j);
while ( true ) {
if (System.currentTimeMillis() < currentTime + 4000) {
j++;
} else {
LogUtils.e("current j = " + j);
return;
}
}
}
};
thread2.start();
}
}
整体的代码,就是以上的内容。为了结果的严谨性,我做出了4次实验的测试。
测试1:只开单个线程,看线程的结果。
可以从上面看出,他最大的数值为 3608599,最小的数值为 3557625,最大间隔:87162 相差的百分比为 2%
测试2:开两个线程,时间都是4s,看线程结果
可以从上面看出,他最大的数值为 339449,最小的数值为 3194879,相差的百分比为 4%
可以看到,我们开单个线程的时候,最小的值为3557625 ,但是两个线程的时候,最小的数值缺为 3194879,可以得出结论,如果线程之间同时执行,会比之前单个线程进行执行存在一定的损耗,并且这个损耗和之前开的线程数量有呈正比的关系。
此文章,只是我自己通过程序得出的结论,未必是特别准的;所以,仅供参考。