Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all articles
Browse latest Browse all 5930

一起Talk Android吧(第二十五回:Java多线程编程三)

$
0
0

各位看官们,大家好,上一回中咱们说的是Java多线程编程的例子,这一回咱们继续说该例子。闲话休提, 言归正转。让我们一起Talk Android吧!


看官们,我们在前面章回中介绍了多线程编程相关的知识,这一回中我们将介绍如何管理多个线程,也就是我们将要介绍的线程池

在Java中提供了执行器(Executor)来管理线程。它提供了多种线程管理方法,我们可以通过这些方法来创建或者关闭一个线程池,接下来我详细介绍一下执行器提供的方法。

newCachedThreadPool()
该方法用来创建一个线程池,它会自动创建新线程并且加入到线程池中,线程池中的空闲线程通常保留1分钟

newFixedThreadPool(int> arg0)
该方法用来创建一个线程池,它会自动创建新线程并且加入到线程池中,线程池中的线程数量为arg0的值,空闲线程会一直保留到线程池销毁

这两个方法是静态方法,可以直接使用。执行器还提供了其它创建线程池的方法,我们就不一一介绍了,只明白这两个常用的方法也可以。

execute(Runnalbe arg0)
该方法用来把具体的线程提交到线程池中,具体的线程就是Runnable类型的参数arg0

submit(Runnalbe arg0)
该方法用来把具体的线程提交到线程池中,具体的线程就是Runnable类型的参数arg0。该方法是重载方法,参数类型有3种,这只是其中的一种

线程池主要是用来管理线程的,比如创建线程,但是它不提供具体的线程,或者说它不管线程中做什么事情,因此我们需要把具体的线程传送到线程池中,这样才能执行线程中具体的内容。这两个方法就承担了这样的使命,通常来讲submit()方法使用多一些,因为它有返回值,可以判断程序运行结果,而且它的参数类型不只局限于Runnable

shutdown()
该方法用来终止向线程池中提交线程,等线程池中所有的线程运行结束后,它会释放线程池中相关的资源。

介绍完这些方法后,我们看看如何使用这些方法来创建线程池,下面是具体的操作步骤:

  • 1.创建线程池(使用newXXXThreadPool方法);
  • 2.向线程中提交线程(使用submit或者execute方法);
  • 3.关闭线程池(使用shutdown方法);

看官们,万事俱备只欠东风,接下来我们通过具体的代码来演示一下线程池的用法:

    public static void main(String[] args) {

        TestThread threadItem = new TestThread();

//      ExecutorService execServ = Executors.newCachedThreadPool(); //步骤1
        ExecutorService execServ = Executors.newFixedThreadPool(2); //步骤1   
        for(int i=0; i<2; ++i)
//          execServ.execute(threadItem);   //步骤2
            execServ.submit(threadItem);    //步骤2

        execServ.shutdown();    //步骤3
    }   

看官们,这里只列出了main函数的代码,其它的代码使用前面章回中的代码就可以。因为没有改动,所以我们就不列出来了。从代码中可以看到我们没有去创建线程,也没有使用start方法去启动线程,我们把这些工作我们都交给了线程池,它会很好地去处理这些事情,进而提高进程运行效率。

下面是程序的运行结果,请大家参考:

pool-1-thread-1 Data :1
pool-1-thread-1 Data :2
pool-1-thread-1 Data :3
pool-1-thread-2 Data :1
pool-1-thread-1 Data :4
pool-1-thread-1 Data :5
pool-1-thread-2 Data :2
pool-1-thread-2 Data :3
pool-1-thread-2 Data :4
pool-1-thread-2 Data :5

从该结果中可以看到,线程池创建了两个线程,并且完了线程中的具体工作:让data的数值从1到5递增。对比一下前面章回中的内容就会发现,在线程名字前面多了线程池的信息,从中可以看出,这是线程池帮我们创建的线程。

看官们,本章回的内容只是线程池的基础知识,希望能够通过它引着大家进入线程池的大门。由于时间的限制,我们就不深入介绍了,希望大家可以自己去探索。

各位看官,关于Java多线程编程的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!


作者:talk_8 发表于2017/5/31 15:11:45 原文链接
阅读:14 评论:0 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>