各位看官们,大家好,上一回中咱们说的是Java多线程编程的例子,这一回咱们继续说该例子。闲话休提, 言归正转。让我们一起Talk Android吧!
看官们,我们在前面章回中介绍了多线程编程相关的知识,这一回中我们将介绍如何管理多个线程,也就是我们将要介绍的线程池。
在Java中提供了执行器(Executor)来管理线程。它提供了多种线程管理方法,我们可以通过这些方法来创建或者关闭一个线程池,接下来我详细介绍一下执行器提供的方法。
newCachedThreadPool()
该方法用来创建一个线程池,它会自动创建新线程并且加入到线程池中,线程池中的空闲线程通常保留1分钟newFixedThreadPool(int> arg0)
该方法用来创建一个线程池,它会自动创建新线程并且加入到线程池中,线程池中的线程数量为arg0的值,空闲线程会一直保留到线程池销毁
这两个方法是静态方法,可以直接使用。执行器还提供了其它创建线程池的方法,我们就不一一介绍了,只明白这两个常用的方法也可以。
execute(Runnalbe arg0)
该方法用来把具体的线程提交到线程池中,具体的线程就是Runnable类型的参数arg0submit(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多线程编程的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!