Android线程池使用

来源:互联网 发布:淘宝缴费平台 编辑:程序博客网 时间:2024/05/19 19:57

前一篇博文讲了Android线程的创建和启动,创建有继承Thread类、实现Runnable接口、实现Callable接口等三种方法,启动都是调用了Start()方法来启动的,其实还可以用线程池来启动线程。

系统启动一个新线程的成本是比较高的,因为它涉及与操作系统交互。在这种情形下,使用线程池可以很好地提高性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池。

效果图


ThreadPoolActivity.java

package com.example.androidthreadpool;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.FutureTask;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.widget.TextView;public class ThreadPoolActivity extends Activity {    TextView txtShow1;@Override    protected void onCreate(Bundle savedInstanceState)     {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_thread_pool);        txtShow1=(TextView)findViewById(R.id.txtShow1);        //创建一个线程池        ExecutorService pool1=Executors.newFixedThreadPool(2);        //将一个Runnable对象传递给线程池        FirstThread ft=new FirstThread();        pool1.submit(ft);        //将一个Callable对象传递给线程池        FutureTask<String> task=new FutureTask<String>(new SecondThread());        pool1.submit(task);        //创建一个具有延迟启动线程功能的线程池        ScheduledExecutorService pool2=Executors.newScheduledThreadPool(2);        //延迟1秒启动线程        pool2.schedule(ft, 1, TimeUnit.SECONDS);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.thread_pool, menu);        return true;    }    //实现Runnable接口创建线程类    public class FirstThread implements Runnable    {    @Override    public void run()    {    txtShow1.append(Thread.currentThread().getName()+" implements Runnable"+"\n");    }    }    //使用Callable和Future创建线程类    public class SecondThread implements Callable<String>    {    public String call()    {      txtShow1.append(Thread.currentThread().getName()+" implements Callable"+"\n");    return " implements Callable";    }    }}



0 0