java高级特性之多线程 线程池

本文详细介绍了Java中线程池的使用方法,包括如何利用Executors创建不同类型的线程池,以及如何通过线程池来执行任务。文章还讨论了线程池带来的好处,例如减少系统开销和提高并发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系统启动一个新线程的成本是比较高的,因为它涉及与os交互。这种情况下,系统启动时即创建大量空闲的线程,就可以很好地提高性能,尤其是当程序需要创建大量生存期很短暂的线程时。
除此之外,使用线程池可以有效地控制系统中并发线程的数量。避免因并发创建的线程过多,导致系统性能下降,JVM崩溃。
Java 5以前,需要手动创建自己的线程池;Java 5开始,新增了Executors工厂类产生线程池。
使用线程池执行线程任务的步骤如下:
1.调用Executors 类的静态方法newFixedThreadPool(int nThreads),创建一个可重用的、具有固定线程数的线程池ExecutorService对象
2.创建Runnable实例,作为线程执行任务
3.调用ExecutorService对象的submit()提交Runnable实例
4.调用ExecutorService对象的shutDown()方法关闭线程池。

Executors
ExecutorService newCachedThreadPool()
返回一个带缓存的线程池,该池在必要的时候创建线程,在线程空闲60秒后终止线程。
ExecutorService newFixedThreadPool(int threads)
ExecutorService newSingleThreadExecutor()

ExecutorService
Future submit(Runnable task)
Future submit(Runnable task,T result)
void shutdown()

如下的实例代码,实现了三种开启线程的方式,另外启用了线程池的方式。

      @Test
      public void test01(){
           new MyThread01().start();
           new Thread(new MyThread02()).start();
          ExecutorService threadPool = Executors.newFixedThreadPool(10);
          threadPool.submit( new MyThread03());
     }

class MyThread01 extends Thread
{
      @Override
      public void run()
     {
          System. out .println("-----MyThread01" );
     }
}
class MyThread02 implements Runnable
{
      public void run()
     {
          System. out .println("-----MyThread02" );
     }
}
class MyThread03 implements Callable<Integer>
{
      @Override
      public Integer call() throws Exception
     {
          System. out .println("-----MyThread03" );
           return 200;
     }
}

Future类型的对象封装了 异步计算的结果信息。Future对象在第二个submit()方法中,通过调用get方法在方法完成的时候返回result对象。
在使用连接池该做的事儿:
1,调用Executors类中静态的方法newCachedThreadPool或者NewFixedThreadPool
2,调用submint提交Runnable或者Callable对象
3,如果想要取消一个任务,最好保存返回的Future对象
4,当不再提交任务的时候,调用Shutdown()。

预订执行
ScheduleExecutorService接口具有预订执行或重复执行任务而设计的方法。它是一种允许使用线程池机制的java.util.Timer的泛化。
Executors类的newScheduledThreadPool和newSingleThreadScheduleExecutor方法将返回实现了如上接口的对象。
ScheduleFuture

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值