`
小白杨的记忆
  • 浏览: 16156 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

线程与线程池

 
阅读更多

线程

   线程的一些主要状态以及状态之间的装换 (如下图)

           

       主要状态为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>();

 

  • 大小: 74.1 KB
分享到:
评论

相关推荐

    Android开发经验谈:并发编程(线程与线程池)(推荐)

    Android开发经验谈:并发编程(线程与线程池) Android开发中,线程和线程池是两个非常重要的概念。线程是Android开发中的一种基本单位,它可以帮助我们实现并发编程,提高应用程序的性能和响应速度。然而,线程也...

    详解python中的线程与线程池

    ### 详解 Python 中的线程与线程池 在探讨 Python 中线程与线程池的概念之前,我们先了解一些基本概念。 #### 进程与线程的基本概念 **进程**(Process):进程是操作系统资源分配的基本单位,也是用户程序的一次...

    Java中的线程与线程池.pptx

    2. newSingleThreadExecutor:创建一个单线程线程池,所有任务都在一个线程中顺序执行,保证了任务的执行顺序。 3. newFixedThreadPool:创建一个固定大小的线程池,线程数量保持不变,任务排队等待执行。 4. ...

    并发编程之线程与线程池.pptx

    并发编程之线程与线程池.pptx 内部培训PPT 多线程 线程池

    C#Winform异步多线程和线程池集成的用法

    在C#编程中,线程和线程池是并发编程中的关键概念,特别是在开发Windows桌面应用程序(Winform)时,为了提升程序的响应性和效率,理解并熟练运用这些技术至关重要。本文将深入探讨如何在Winform应用中使用异步多...

    多线程与线程池技术详解(图书配套)

    多线程与线程池是Java编程中至关重要的概念,特别是在处理高并发场景时,它们的作用尤为突出。本文将深入探讨这两个主题,并结合标签中的"排它锁"、"重入锁"、"共享锁"等概念进行讲解。 首先,线程是操作系统分配...

    c++11线程与线程池Demo 完整vs2013工程

    在这个“c++11线程与线程池Demo 完整vs2013工程”中,我们可以深入理解C++11如何通过`&lt;thread&gt;`库来实现线程管理和线程池的概念。 线程是操作系统分配CPU时间片的基本单元,它允许程序并发执行多个任务,从而提高...

    多线程与线程池技术详解

    总之,理解和掌握多线程与线程池技术是Java程序员必备的技能,这不仅对面试有帮助,更是提升实际项目性能的关键。通过深入学习这些技术,可以更好地应对高并发环境下的挑战,为软件开发带来更高的效率和可靠性。

    多线程编程线程池

    #### 五、线程池与Web服务器 在 ASP.NET 应用程序中使用线程池时需要特别小心。由于 ASP.NET 使用相同的线程池来处理 HTTP 请求,如果线程池中的所有工作线程都被长时间运行的任务占用,那么将无法处理新的 HTTP ...

    java多线程,对多线程,线程池进行封装,方便使用

    使用`Future`接口可以获取线程执行的结果,`Callable`接口则允许线程返回一个结果,它们与线程池结合使用可以实现异步计算。 8. **线程池的扩展** Java并发包中还有一些其他的Executor实现,如...

    单线程,多线程,线程池程序设计扫描网络IP.doc

    【线程与线程池的概念】 线程是操作系统分配处理器时间的基本单元,它允许程序并发执行,使得程序能够同时处理多个任务。单线程是指一个程序只有一个执行流,而多线程则是指一个程序可以有多个执行流,它们可以在...

    c#多线程以及线程池的学习

    在C#编程中,多线程和线程池是实现并发执行任务的关键技术,它们能够提升应用程序的性能和响应性。下面将详细讲解这两个概念及其应用。 **一、多线程** 多线程允许程序同时执行多个独立的任务,提高CPU利用率。在...

    JAVA线程、线程池资料----下载不扣分,回帖加1分,欢迎下载,童叟无欺

    .......................................JAVA线程、线程池资料----下载不扣分,回帖加1分,欢迎下载,童叟无欺JAVA线程、线程池资料----下载不扣分,回帖加1分,欢迎下载,童叟无欺JAVA线程、线程池资料----下载不...

    java基础知识多线程线程池讲解和练习

    Java多线程与线程池是Java编程中的核心概念,特别是在构建高性能、高并发的应用时不可或缺。本资源旨在深入解析这两个关键知识点,并提供实践练习,帮助开发者熟练掌握它们。 首先,我们要理解什么是Java多线程。在...

    线程,线程池与Handler的用法

    在Android开发中,线程和线程池是处理异步任务的重要工具,而Handler则是用于在主线程和子线程之间通信的关键组件。本篇文章将深入探讨这些概念,以及它们在实际应用中的用法。 首先,让我们理解什么是线程。线程是...

    通用多线程模块(jdk线程池的运用)

    介绍一个通用多线程服务模块。是利用jdk线程池,多线程并行处理多任务,以提高执行效率。

    多线程(线程池)的相关研究资料

    然而,多线程也带来了挑战,如线程间的同步与通信、死锁问题、资源竞争以及上下文切换开销等。解决这些问题通常需要使用到互斥量、信号量、条件变量等同步原语,以及合理的线程调度策略。 线程池是一种线程管理技术...

    Java多线程+线程池.docx

    Java 多线程和线程池 Java 多线程是指在 Java 编程语言中,一个线程的动态执行过程。这个过程包括线程的创建、执行和销毁三个阶段。在 Java 中,创建线程有多种方式,包括通过实现 Runnable 接口、继承 Thread 类...

    多线程以及线程池 Demo

    【多线程 线程池 线程同步--DEMO】 软件平台:Visual Studio 2008 开发语言:C# 引用系统类:System.Threading System.Threading.ThreadPool 模拟多线程以及线程池的使用,对概念理解很有帮助的。

Global site tag (gtag.js) - Google Analytics