多线程基础知识总结三---线程池

线程池

线程池概念

创建一些线程,这些线程的集合称为线程池。使用线程池可以很好地提高性能,线程池在系统启动时便创建大量空闲线程,程序分配一个任务给线程池,线程池就会启动一条线程来执行该任务,执行完后,该线程并不死亡,而是再次返回线程池等待执行下一个任务。

线程池工作机制

线程池编程模式下,任务被提交给整个线程池而不是交给某个线程,线程池在拿到任务后,就在内部寻找是否有空闲的线程,有的话,则将任务交给某个空闲的线程;一个线程同时只能执行一个任务,但可以同时向一个线程池提交多个任务。

使用线程池的原因

多线程运行时间,系统不断的启动和关闭新线程,成本非常高,会过度消耗系统资源,以及过度切换线程可能导致系统资源崩溃。

四种常见的线程池

在这里插入图片描述

1.Executors.newCacheThreadPool()

缓存线程池,先查看池中有没有以前建立的线程,如果有,就直接使用。如果没有,就建一个新的线程加入池中,缓存型池子通常用于执行一些生存期很短的异步型任务。线程池无限大,当执行当前任务时上一个任务已经完成,会复用执行上一个任务的线程,而不是每次新建线程。
示例代码

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class CacheThreadPool {
	public static void main(String []args){
	    //创建一个可缓存的线程池
		ExecutorService es= Executors.newCachedThreadPool();
		for(int i=0;i<10;i++){
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			es.execute(new Runnable(){
				@Override
				public void run() {
					// TODO Auto-generated method stub
					System.out.println(Thread.currentThread().getName()+"正在执行");
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			});
		}
	}
}

2.Executors.newFixedThreadPool(int n)

创建一个可重用固定个数的线程池,大小为n,以共享的无界队列方式来运行这些线程,定长线程池的大小最好根据系统资源进行设置。
示例代码

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class FixedThreadPool {
	public static void main(String []args){
		ExecutorService es=Executors.newFixedThreadPool(4);
		for(int i=0;i<10;i++){
			es.execute(new Runnable(){
				@Override
				public void run() {
					// TODO Auto-generated method stub
					System.out.println(Thread.currentThread().getName()+"正在执行");
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			});
		}
	}
}

3.Executors.newScheduledThreadPool(int n)

创建一个定长线程池,支持定时及周期性任务执行,n表示线程池的大小
示例代码

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class ScheduledThreadPool {
	public static void main(String []args){
		//创建一个定长为4的线程池
		ScheduledExecutorService es=Executors.newScheduledThreadPool(4);
	   //延迟一秒执行
		/*
		es.schedule(new Runnable(){
			@Override
			public void run() {
				// TODO Auto-generated method stub
				System.out.println("延迟了5秒才执行");
			}
		}, 5, TimeUnit.SECONDS);
		//es.schedule(Runnable(),延长时间,时间单元)  只执行一次
		*/
		
		es.scheduleAtFixedRate(new Runnable(){
			@Override
			public void run() {
				System.out.println("延迟1秒后每3秒执行一次,当前线程:"+Thread.currentThread().getName());
			}
		}, 1, 3, TimeUnit.SECONDS);
		//es.schedule(Runnable(),延长时间,间隔时间,时间单元)  不断执行
	}
}

4.Executors.newSingleThreadExecutor()

创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
示例代码:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class SingleThreadExecutor {
	public static void main(String []args){
		ExecutorService es=Executors.newSingleThreadExecutor();
		for(int i=0;i<10;i++){
			final int index=i;
			es.execute(new Runnable(){
				@Override
				public void run() {
					// TODO Auto-generated method stub
					System.out.println(Thread.currentThread().getName()+"是第:"+index+"个线程");
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}		
			});
		}
	}
}

参考网址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园悬赏任务平台对字典管理、论坛管理、任务资讯任务资讯公告管理、接取用户管理、任务管理、任务咨询管理、任务收藏管理、任务评价管理、任务订单管理、发布用户管理、管理员管理等进行集中化处理。经过前面自己查阅的网络知识,加上自己在学校课堂上学习的知识,决定开发系统选择小程序模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问,采用的主流的Java语言这种面向对象的语言进行校园悬赏任务平台程序的开发,在数据库的选择上面,选择功能强大的Mysql数据库进行数据的存放操作。校园悬赏任务平台的开发让用户查看任务信息变得容易,让管理员高效管理任务信息。 校园悬赏任务平台具有管理员角色,用户角色,这几个操作权限。 校园悬赏任务平台针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理任务信息,管理任务资讯公告信息等内容。 校园悬赏任务平台针对用户设置的功能有:查看并修改个人信息,查看任务信息,查看任务资讯公告信息等内容。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。项目管理页面提供的功能操作有:查看任务,删除任务操作,新增任务操作,修改任务操作。任务资讯公告信息管理页面提供的功能操作有:新增任务资讯公告,修改任务资讯公告,删除任务资讯公告操作。任务资讯公告类型管理页面显示所有任务资讯公告类型,在此页面既可以让管理员添加新的任务资讯公告信息类型,也能对已有的任务资讯公告类型信息执行编辑更新,失效的任务资讯公告类型信息也能让管理员快速删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值