Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android线程正在等待_Java_Android_Multithreading_Thread Safety_Android Asynctask - Fatal编程技术网

Java Android线程正在等待

Java Android线程正在等待,java,android,multithreading,thread-safety,android-asynctask,Java,Android,Multithreading,Thread Safety,Android Asynctask,在我的Android应用程序中,我使用一个初始活动来启动ASyncTask,然后启动mainactivity,下载大约10幅图像并在表格中向用户显示。 我今天刚开始研究DDMS和调试模式,我看到在加载应用程序之后,我有一个线程用于异步任务,还有10个http线程在等待。这正常吗?他们不应该随着最后一条指令的执行而死去吗 这是我的密码: public void download (String imageURL, String path, String filename){ new Th

在我的Android应用程序中,我使用一个初始活动来启动ASyncTask,然后启动mainactivity,下载大约10幅图像并在表格中向用户显示。 我今天刚开始研究DDMS和调试模式,我看到在加载应用程序之后,我有一个线程用于异步任务,还有10个http线程在等待。这正常吗?他们不应该随着最后一条指令的执行而死去吗

这是我的密码:

public void download (String imageURL, String path, String filename){
     new Thread(){
       public void run() {
                    long startTime = System.currentTimeMillis();
                try {
                    //Create the path
                    new File(path).mkdirs();
                    //File to download
                    File file = new File(path+filename);
                    if (!file.exists()){
                        Log.d(Manager.getAppName(),file.getName()+" dont exists");
                        URL url = new URL(imageURL);
                        URLConnection ucon = url.openConnection();
                        InputStream is = ucon.getInputStream();
                        BufferedInputStream bis = new BufferedInputStream(is);
                        ByteArrayBuffer baf = new ByteArrayBuffer(50);
                        int current = 0;
                        while ((current = bis.read()) != -1) {
                                baf.append((byte) current);
                        }
                        FileOutputStream fos = new FileOutputStream(file);
                        fos.write(baf.toByteArray());
                        bis.close();
                        fos.close();
                                    is.close();
                        Log.d(Manager.getAppName(), "download ready in "
                                        +( (float)(System.currentTimeMillis() - startTime) / 1000f)
                                        + " sec");
                    } else {
                        Log.d(Manager.getAppName(),"File exists (ignoring)");

                    }
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                if (latch!=null){
                    latch.countDown();
                    Log.d(Manager.getAppName(),"Download finished "+latch.getCount()+" remaining");
                }
            }
        }).start();

}如果线程是线程池的一部分,则线程不会死亡。您自己启动它们吗?

这是正确的行为,因为AsyncTask和库(如okhttp)使用线程池。根据系统的不同,池中最多可以有线程数。每当需要一个新线程时,比如创建一个新的AsyncTask时,就会使用池中的一个空闲线程,从而防止每次创建一个新线程所涉及的开销。任务完成后,线程将返回池中的空闲状态,状态为wait

请提供用于启动它们的代码以及运行时的相关部件。是的,我对这个话题很好奇,请用你的代码更新这个问题。