线程
线程的一些主要状态以及状态之间的装换 (如下图)
主要状态为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>();
相关推荐
Android开发经验谈:并发编程(线程与线程池) Android开发中,线程和线程池是两个非常重要的概念。线程是Android开发中的一种基本单位,它可以帮助我们实现并发编程,提高应用程序的性能和响应速度。然而,线程也...
### 详解 Python 中的线程与线程池 在探讨 Python 中线程与线程池的概念之前,我们先了解一些基本概念。 #### 进程与线程的基本概念 **进程**(Process):进程是操作系统资源分配的基本单位,也是用户程序的一次...
2. newSingleThreadExecutor:创建一个单线程线程池,所有任务都在一个线程中顺序执行,保证了任务的执行顺序。 3. newFixedThreadPool:创建一个固定大小的线程池,线程数量保持不变,任务排队等待执行。 4. ...
并发编程之线程与线程池.pptx 内部培训PPT 多线程 线程池
在C#编程中,线程和线程池是并发编程中的关键概念,特别是在开发Windows桌面应用程序(Winform)时,为了提升程序的响应性和效率,理解并熟练运用这些技术至关重要。本文将深入探讨如何在Winform应用中使用异步多...
多线程与线程池是Java编程中至关重要的概念,特别是在处理高并发场景时,它们的作用尤为突出。本文将深入探讨这两个主题,并结合标签中的"排它锁"、"重入锁"、"共享锁"等概念进行讲解。 首先,线程是操作系统分配...
在这个“c++11线程与线程池Demo 完整vs2013工程”中,我们可以深入理解C++11如何通过`<thread>`库来实现线程管理和线程池的概念。 线程是操作系统分配CPU时间片的基本单元,它允许程序并发执行多个任务,从而提高...
总之,理解和掌握多线程与线程池技术是Java程序员必备的技能,这不仅对面试有帮助,更是提升实际项目性能的关键。通过深入学习这些技术,可以更好地应对高并发环境下的挑战,为软件开发带来更高的效率和可靠性。
#### 五、线程池与Web服务器 在 ASP.NET 应用程序中使用线程池时需要特别小心。由于 ASP.NET 使用相同的线程池来处理 HTTP 请求,如果线程池中的所有工作线程都被长时间运行的任务占用,那么将无法处理新的 HTTP ...
使用`Future`接口可以获取线程执行的结果,`Callable`接口则允许线程返回一个结果,它们与线程池结合使用可以实现异步计算。 8. **线程池的扩展** Java并发包中还有一些其他的Executor实现,如...
【线程与线程池的概念】 线程是操作系统分配处理器时间的基本单元,它允许程序并发执行,使得程序能够同时处理多个任务。单线程是指一个程序只有一个执行流,而多线程则是指一个程序可以有多个执行流,它们可以在...
在C#编程中,多线程和线程池是实现并发执行任务的关键技术,它们能够提升应用程序的性能和响应性。下面将详细讲解这两个概念及其应用。 **一、多线程** 多线程允许程序同时执行多个独立的任务,提高CPU利用率。在...
.......................................JAVA线程、线程池资料----下载不扣分,回帖加1分,欢迎下载,童叟无欺JAVA线程、线程池资料----下载不扣分,回帖加1分,欢迎下载,童叟无欺JAVA线程、线程池资料----下载不...
Java多线程与线程池是Java编程中的核心概念,特别是在构建高性能、高并发的应用时不可或缺。本资源旨在深入解析这两个关键知识点,并提供实践练习,帮助开发者熟练掌握它们。 首先,我们要理解什么是Java多线程。在...
在Android开发中,线程和线程池是处理异步任务的重要工具,而Handler则是用于在主线程和子线程之间通信的关键组件。本篇文章将深入探讨这些概念,以及它们在实际应用中的用法。 首先,让我们理解什么是线程。线程是...
介绍一个通用多线程服务模块。是利用jdk线程池,多线程并行处理多任务,以提高执行效率。
然而,多线程也带来了挑战,如线程间的同步与通信、死锁问题、资源竞争以及上下文切换开销等。解决这些问题通常需要使用到互斥量、信号量、条件变量等同步原语,以及合理的线程调度策略。 线程池是一种线程管理技术...
Java 多线程和线程池 Java 多线程是指在 Java 编程语言中,一个线程的动态执行过程。这个过程包括线程的创建、执行和销毁三个阶段。在 Java 中,创建线程有多种方式,包括通过实现 Runnable 接口、继承 Thread 类...
【多线程 线程池 线程同步--DEMO】 软件平台:Visual Studio 2008 开发语言:C# 引用系统类:System.Threading System.Threading.ThreadPool 模拟多线程以及线程池的使用,对概念理解很有帮助的。