正常来说,创建线程会使用相当一部分的内存,其中包括有堆栈,以及每线程的数据结构。如果创建过多的线程,其中每个线程都将会咱有一部分CPU时间,结果将使用许多内存来支持大量线程,每个线程都运行的很慢。这样就无法很好的使用计算机资源了。
在java1.5中引入了线程池的概念。线程的目标执行对象就可以共享线程池中有限数据的线程对象。
一般的服务器中都会用线程池的概念,比如FTP、WEB服务器等。不过他们都是自己实现的线程池。但在java1.5后,jdk中就引入了线程池的概念,效率也非常不错。
使用JDK提供的线程共分为三个步骤:
1、创建线程目标对象(继承自Thread或实现Runnable接口)。
2、使用Executor来创建线程池,返回一个ExecutorService方法。
3、使用线程池执行线程目标对象。调用execute(Runnable run)方法。最后会调用shutdown方法来结束。
针对线程的基本控制,主要继承自Thread中的方法。
1)Thread.sleep()是当前线程的执行暂停一段指定时间,这可以有效的使应用程序的其他线程或者运行在计算机上的其他进程可以使用处理器时间,该方法不会放弃除CPU之外的其他资源。
2)Join方法暂停当前线程,去等待目标线程完成。如果t1,t2是两个Thread线程,在t1中调用t2.join,会导致t1线程暂停执行,直到等待t2线程终止为止。
3)interrupt取消线程。已经启动的线程是活跃的,即isAlive方法返回true。线程终止之前一直都是活跃的。有三种方法可以让线程终止:run方法运行完毕;run方法异常结束;应用程序终止。