线程
线程的一些主要状态以及状态之间的装换 (如下图)
主要状态为1.新建 2.就绪 3.运行4阻塞 5.死亡
其中:join()可以用来邀请其他线程先执行
yield()告诉系统"把自己的CPU时间让掉,让其他线程或者自己运行"
引入线程的好处:
1 创建一个线程花费的时间少
2 两个线程(在同一进程中的)的切换时间少。
3 由于同一个进程内的线程共享内存和文件,所以线程之间互相通信不必调用内核。
4 线程能独立执行,能充分利用和发挥处理机与外围设备并行工作的能力
线程池
当线程的执行时间远大于创建时间和销毁时间之和时,采用线程池不仅调整和缩短创建线程,销毁线程的时间,而且它还显著减少了创建线程的数目。
一般一个简单线程池至少包含下列组成部分。
1. 线程池管理器(ThreadPoolManager):用于创建并管理线程池
2.工作线程(WorkThread): 线程池中线程
3. 任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。
4.任务队列:用于存放没有处理的任务。提供一种缓冲机制。
如下例:
···自定义线程池类
···创建线程池管理器
//构造函数(自定义线程池) public ThreadPool(int count){ this.count=count; threadPool=new ThreadWork[this.count]; for(int i=0;i<this.count ;i++){ ThreadWork work=new ThreadWork();//创建一个工作线程 threadPool[i]=work; threadPool[i].setName("创建第"+i+"号线程"); threadPool[i].start(); System.out.println("第"+i+"号线程开始运行"); } }
//添加新任务
//执行任务的方法 public void excute(Runnable task){ synchronized(task_list){ //添加任务到等待队列中 task_list.addLast(task); //通知 task_list.notify(); } }
创建工作线程
//工作线程 private class ThreadWork extends Thread{ public void run(){ Runnable r; while(true){ synchronized(task_list){ if(task_list.isEmpty()){//队列为空时,等待 try { task_list.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } //没执行完一次任务之后将该任务从等待就绪队列中删除 r=task_list.removeFirst(); } r.run();//执行删除的操作 } } }
创建任务接口
package threadPool; //自定义任务类 public class Task implements Runnable{ public void run() { //输出当前正在执行的线程的名字 System.out.println(Thread.currentThread().getName()+"正在运行"); try { Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
创建任务队列
//保存等待任务的队列 private LinkedList<Runnable> task_list=new LinkedList<Runnable>();
相关推荐
并发编程之线程与线程池.pptx 内部培训PPT 多线程 线程池
在当前的Java面试和后台开发中,多线程与线程池技术越来越重要。毫不夸张的说,如何你想进入任何一家好的网络公司并能够长足发展,多线程与线程池技术是必须要掌握的技能!
本文档对Java中的线程和线程池进行了简单介绍。首先,阐述了为什么需要线程、Java中实现线程的几种方式,线程的多种状态切换;然后,介绍了为什么需要线程池,JDK自带的线程池实现方式ThreadPoolExecutor的使用及其...
利用c++11标准库实现的线程和线程池样例程序,可调用任意参数的函数作为线程任务,支持类成员函数的调用。
本套视频为同名图书的配套视频,图书预计在2021.4上市
java多线程,对多线程,线程池进行封装,方便使用
c#多线程以及线程池的学习 c#多线程以及线程池的学习 c#多线程以及线程池的学习
创建多线程操作是非常昂贵的,如果每个运行时间非常短的操作,都创建多线程进行操作,可能并不能提高效率,反而降低... 如果你有非常多的执行时间非常短的操作,那么适合作用线程池来提高效率,而不是自行创建多线程。
本程序详细介绍了线程和线程池的用法,使用多线程进行和异步编程实现数据库操作和日志的记录
线程、多线程和线程池面试专题.线程、多线程和线程池面试专题.线程、多线程和线程池面试专题.线程、多线程和线程池面试专题.
.......................................JAVA线程、线程池资料----下载不扣分,回帖加1分,欢迎下载,童叟无欺JAVA线程、线程池资料----下载不扣分,回帖加1分,欢迎下载,童叟无欺JAVA线程、线程池资料----下载不...
介绍一个通用多线程服务模块。是利用jdk线程池,多线程并行处理多任务,以提高执行效率。
【多线程 线程池 线程同步--DEMO】 软件平台:Visual Studio 2008 开发语言:C# 引用系统类:System.Threading System.Threading.ThreadPool 模拟多线程以及线程池的使用,对概念理解很有帮助的。
主要介绍了python线程与线程池,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
java线程、线程池、xml解析 适合入门的例子或文档 上手使用
主要介绍了Android开发经验谈:并发编程(线程与线程池),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
线程、多线程和线程池面试专题
中文文档,其目录如下: 线程中一些基本术语和概念 线程之间的通讯 Java线程调度 线程池 工作队列
多线程(线程池)的相关研究资料 内附几篇经典的研究论文对相关算法的研究