Android线程池使用

来源:互联网 发布:玉和颜去黑头 知乎 编辑:程序博客网 时间:2024/05/28 14:57


标签: Android 线程池
208人阅读评论(0) 收藏 举报
本文章已收录于:
分类:
作者同类文章X

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

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

    效果图


    ThreadPoolActivity.java

    [java] view plain copy print?
    1. package com.example.androidthreadpool;
    2. import java.util.concurrent.Callable;
    3. import java.util.concurrent.ExecutionException;
    4. import java.util.concurrent.ExecutorService;
    5. import java.util.concurrent.Executors;
    6. import java.util.concurrent.FutureTask;
    7. import java.util.concurrent.ScheduledExecutorService;
    8. import java.util.concurrent.TimeUnit;
    9. import android.os.Bundle;
    10. import android.app.Activity;
    11. import android.view.Menu;
    12. import android.widget.TextView;
    13. public class ThreadPoolActivityextends Activity
    14. {
    15. TextView txtShow1;
    16. @Override
    17. protected void onCreate(Bundle savedInstanceState)
    18. {
    19. super.onCreate(savedInstanceState);
    20. setContentView(R.layout.activity_thread_pool);
    21. txtShow1=(TextView)findViewById(R.id.txtShow1);
    22. //创建一个线程池
    23. ExecutorService pool1=Executors.newFixedThreadPool(2);
    24. //将一个Runnable对象传递给线程池
    25. FirstThread ft=new FirstThread();
    26. pool1.submit(ft);
    27. //将一个Callable对象传递给线程池
    28. FutureTask<String> task=new FutureTask<String>(new SecondThread());
    29. pool1.submit(task);
    30. //创建一个具有延迟启动线程功能的线程池
    31. ScheduledExecutorService pool2=Executors.newScheduledThreadPool(2);
    32. //延迟1秒启动线程
    33. pool2.schedule(ft, 1, TimeUnit.SECONDS);
    34. }
    35. @Override
    36. public boolean onCreateOptionsMenu(Menu menu) {
    37. // Inflate the menu; this adds items to the action bar if it is present.
    38. getMenuInflater().inflate(R.menu.thread_pool, menu);
    39. return true;
    40. }
    41. //实现Runnable接口创建线程类
    42. public class FirstThreadimplements Runnable
    43. {
    44. @Override
    45. public void run()
    46. {
    47. txtShow1.append(Thread.currentThread().getName()+" implements Runnable"+"\n");
    48. }
    49. }
    50. //使用Callable和Future创建线程类
    51. public class SecondThreadimplements Callable<String>
    52. {
    53. public String call()
    54. {
    55. txtShow1.append(Thread.currentThread().getName()+" implements Callable"+"\n");
    56. return " implements Callable";
    57. }
    58. }
    59. }  
    0 0