线程池创建的四种方法是什么和什么,线程池创建的四种方法是什么原理

  线程池创建的四种方法是什么和什么,线程池创建的四种方法是什么原理

  如何解决写爬虫IP受阻的问题?立即使用。

  线程池创建的四种方法

  Java执行器提供了四个线程池,即:

  1、使用newCachedThreadPool

  NewCachedThreadPool创建一个可缓存的线程池。如果线程池的长度超过处理需要,它可以灵活地回收空闲线程。如果没有回收,它可以创建新的线程。

  这种类型的线程池的特点是:

  创建的工作线程数量几乎没有限制(事实上,是有限制的,数量是整数。MAX_VALUE),可以灵活地将线程添加到线程池中。

  如果长时间没有向线程池提交任务,也就是说,如果工作线程空闲了指定的时间(默认为1分钟),工作线程将自动终止。终止后,如果您提交一个新任务,线程池将重新创建一个工作线程。

  在使用CachedThreadPool时,一定要注意控制任务的数量,否则会有大量线程同时运行,可能会造成系统瘫痪。

  示例代码如下:

  包装测试;

  导入Java . util . concurrent . executorservice;

  导入Java . util . concurrent . executors;

  公共类ThreadPoolExecutorTest {

  公共静态void main(String[] args) {

  ExecutorService cachedThreadPool=executors . newcachedthreadpool();

  for(int I=0;i 10i ) {

  final int index=I;

  尝试{

  Thread.sleep(索引* 1000);

  } catch (InterruptedException e) {

  e . printstacktrace();

  }

  cachedthreadpool . execute(new Runnable(){

  公共无效运行(){

  system . out . println(index);

  }

  });

  }

  }

  }2、使用newFixedThreadPool

  用指定数量的工作线程创建一个线程池。每次提交任务时,都会创建一个工作线程。如果工作线程的数量达到线程池的初始最大值,提交的任务将存储在池队列中。

  FixedThreadPool是一个典型而优秀的线程池,具有提高程序效率和节省创建线程成本的优点。但是,当线程池空闲时,即线程池中没有可运行的任务时,它不会释放工作线程,也会占用一些系统资源。

  示例代码如下:

  包装测试;

  导入Java . util . concurrent . executorservice;

  导入Java . util . concurrent . executors;

  公共类ThreadPoolExecutorTest {

  公共静态void main(String[] args) {

  ExecutorService cachedThreadPool=executors . newcachedthreadpool();

  for(int I=0;i 10i ) {

  final int index=I;

  尝试{

  Thread.sleep(索引* 1000);

  } catch (InterruptedException e) {

  e . printstacktrace();

  }

  cachedthreadpool . execute(new Runnable(){

  公共无效运行(){

  system . out . println(index);

  }

  });

  }

  }

  }因为线程池大小为3,每个任务在睡眠2秒后输出index,所以每两秒打印3个数字。

  固定线程池的大小最好根据runtime.getruntime()等系统资源来设置。可用处理器()。

  3、使用newSingleThreadExecutor

  创建单线程执行器,即只创建一个唯一的工作线程来执行任务。它将只使用唯一的工作线程来执行任务,确保所有任务都按照指定的顺序(FIFO、LIFO、priority)执行。如果这个线程异常结束,它将被另一个线程替换,以确保顺序执行。单个工作线程最大的特点就是可以保证每个任务的顺序执行,在任何给定的时间都不会有多个线程处于活动状态。

  示例代码如下:

  包装测试;

  导入Java . util . concurrent . executorservice;

  导入Java . util . concurrent . executors;

  公共类ThreadPoolExecutorTest {

  公共静态void main(String[] args) {

  ExecutorService singleThreadExecutor=executors . newsinglethreadexecutor();

  for(int I=0;i 10i ) {

  final int index=I;

  singleThreadExecutor.execute(新的Runnable() {

  公共无效运行(){

  尝试{

  system . out . println(index);

  线程.睡眠(2000年);

  } catch (InterruptedException e) {

  e . printstacktrace();

  }

  }

  });

  }

  }

  }4、使用newScheduledThreadPool

  创建一个定长的线程池,而且支持定时的以及周期性的任务执行,支持定时及周期性任务执行。

  延迟3秒执行,延迟执行示例代码如下:

  包装测试;

  导入Java。util。并发。遗嘱执行人;

  导入Java。util。并发。scheduledexecutorservice

  导入Java。util。并发。时间单位;

  公共类ThreadPoolExecutorTest {

  公共静态void main(String[] args) {

  ScheduledExecutorService scheduledThreadPool=executors。newscheduledthreadpool(5);

  scheduledthreadpool。计划(新的Runnable(){

  公共无效运行(){

  System.out.println("延迟3秒");

  }

  },3,时间单位。秒);

  }

  }表示延迟一秒后每3秒执行一次,定期执行示例代码如下:

  包装测试;

  导入Java。util。并发。遗嘱执行人;

  导入Java。util。并发。scheduledexecutorservice

  导入Java。util。并发。时间单位;

  公共类ThreadPoolExecutorTest {

  公共静态void main(String[] args) {

  ScheduledExecutorService scheduledThreadPool=executors。newscheduledthreadpool(5);

  scheduledthreadpool。scheduleatfixedrate(new Runnable(){

  公共无效运行(){

  System.out.println(延迟一秒,每3秒执行一次);

  }

  },1,3,时间单位。秒);

  }

  }更多编程相关知识,请访问:编程学习网站!以上就是线程池创建的四种方法是什么的详细内容,更多请关注我们其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: