`
yangnier
  • 浏览: 8574 次
  • 性别: Icon_minigender_2
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

多线程编程

阅读更多
   许多程序都包含一些独立的代码段,如果让这些代码段的执行时间彼此重叠,就可以获得更高的执行效率。线程就是为了实现这种重叠执行而引入的一个概念。线程是独立,并发执行的线程单元。多线程指程序中同时存在多个执行体,它们按照自己的执行路线并发工作,独立完成各自的功能,互不干扰。

   多线程机制是JAVA语言中的一个重要特征,使用多线程技术可以使系统同时运行多个执行体,这样加快程序的响应时间,提高计算机资源的利用率。使用多线程技术可以提高整个应用系统的性能。

1、线程是用Thread类及其子类对象来表示。
      线程定义:定义一个类extends Thread
                重写线程的run方法,将并发任务写在run方法中
                创建线程对象
                启动线程,调用线程的start方法

2、 线程的集中创建方法
  继承Thread    重写run方法,创建对象,调用start方法
   实现Runnable接口   重写run方法,创建对象,将对象包装成线程对象,调用start方法
  继承定时器任务类Timetable  重写run方法,创建任务对象,创建定时器对象,定时器启动任务
 
用继承Thread类的子类或通过实现Runnable接口来创建线程无本质的区别,但是由于Java语言不允许多重继承,所以如果一个类必须继承另一个非Thread类,此时要实现多线程只能通过实现Runnable接口的方式。

  3、线程的状态[生命周期]
New Thread 新建状态   用new关键字和Thread类或其子类建立一个线程对象,该线程就处于新建状态。处于其状态的线程是有自己的内存空间的,通过start方法进入就绪状态。

Runnable 就绪状态   处于其状态下的线程就已具备运行条件,但还没分配到CPU,因而将进入线程队列,等待系统为其分配CPU。一旦获得CPU,线程就进入运行状态并自动调用自己的run方法。

Running  运行状态  在运行状态的程序执行自己的run方法中代码,直到调用其他方法而终止、或等待某资源而阻塞或完成任务而死亡。

Not Runnable  挂起状态 处于运行状态的线程在某些情况下,如执行sleep方法,或等待I/O设备等资源,将让出CPU并暂停时终止自己的运行,进入阻塞状态。在阻塞状态下的线程不能进入就绪队列。只有当引起阻塞的原因消除时,如睡眠时间已到,或等待的I/O设备空闲下来,线程便转入就绪状态,重新到就绪队列中排队等待CPU资源。当再次获得CPU时,便从原来终止位置开始继续运行。

Dead   死亡状态   它是线程生命的最后一个阶段,线程死亡的原因有两个:一个是正常运行的线程完成了它的全部工作;另一个线程被强制性的终止,如通过执行stop或destroy方法来终止一个线程。

4、 线程的一些重要方法
Thread.currentThread()  获得当前线程对象
Thread.sleep(毫秒)       当前线程休眠指定的毫秒数
setPriority(Thread.MAX_PRIORUTY); 设置线程的优先级  
getPriority();			获得线程的优先级
join()				 等待该线程执行完毕
yield()					暂停当前正在执行的线程对象,并执行其他线程
getState()				获得线程的状态
isAlive()				是不是活动的线程
	 start()					启动线程的方法


5、 线程的优先级
     每个线程都具有各自的优先级,线程的优先级可以在程序中表明该线程额重要性,如果有很多线程处于就绪状态,系统会根据优先级来决定使哪个线程进入运行状态。但是这并不意味着低优先级的线程得不到运行,而只是它的运行的几率比较小,就好像回收垃圾线程的优先级就比较低。
     线程的优先级可以使用setPriority()方法调整,优先级从1到10 设置优先级的大小,1表示优先级最低,5表示默认优先级,10表示优先级最高,数字越大,优先级越高;如果不在1到10之间,就会产生一个IllegalArgumentException异常。

6、 线程守护
例:
MyThread2 t2 = new MyThread2();
	        //设置t2为守护线程
	        t2.setDaemon(true);
	        t2.start();

      其他普通线程全部执行完毕了,守护线程不管是否执行完毕,都会结束

7、 线程的同步
    在单线程程序中,每次只能做一件事,后面的事情需等待前面的线程完成后才可以进行。但是使用多线程,就会发生两个线程抢占资源的问题,一个账户,两张银行卡,其两张卡同时取钱。所以在多线程编程中,需要防止这些资源访问的冲突。Java提供线程同步的机制来防止资源访问的冲突。
a) 线程默认是异步的
       多个线程可以同时操作同一个数据[同一块内存]
b) 线程的同步
   多个线程不能同时操作同一个数据
c) 如何实现线程的同步??
同步锁
synchronized
方式一:使用synchronized(对象) 锁住需要同步的代码块
synchronized(对象){

}
方式二:使用synchronized锁住需要同步的方法
public synchronized void method(){

}
方式三:从jdk1.5开始提供的对象锁
Lock l = new ReentrantLock();
//上锁
l.lock();
//解锁
L.unlock();
方式四:使用wait-notify机制
  • 大小: 7 KB
分享到:
评论

相关推荐

    Linux下C语言多线程编程实例

    Linux 下 C 语言多线程编程实例 Linux 下的多线程编程是一种非常重要的技术,在实际应用中有非常广泛的应用范围。多线程编程可以大大提高程序的执行效率和响应速度。但是,多线程编程也存在一些复杂性,例如线程...

    iOS 多线程编程指南 pdf

    iOS多线程编程指南是一份深入介绍iOS平台下多线程编程技术的文档。文档主要涵盖的技术点包括NSThread、NSOperation以及Grand Central Dispatch(GCD),这些技术是iOS开发者在开发应用程序时常用的技术。 首先,...

    Linux下的多线程编程.pdf

    "Linux下的多线程编程" Linux下的多线程编程是一种高效的程序设计方法,它可以将一个程序的任务划分为多个部分,每个部分是一个顺序控制流。多线程编程可以实现并行计算,高效利用多处理器,并且具有许多优点,如...

    C#多线程编程实例实战.pdf

    C#多线程编程实例实战 C#多线程编程实例实战是指在C#语言中实现多线程编程的实例和实战经验。多线程编程是指在同一个进程中创建多个线程,以便提高程序的执行效率和响应速度。在C#语言中,可以使用Thread类和线程池...

    基于 QWorker 的多线程编程V1.1(肥猫大叔排版贡献)

    基于 QWorker 的多线程编程V1.1(肥猫大叔排版贡献) QWorker 是 QDAC 项目带给大家的一套多线程并行编程框架。它基于作业的视角来规划作业多线程编程,简化多线程编程的步骤和方法和交互手法。首先,我们要明白我们...

    linux多线程编程手册.pdf

    "Linux 多线程编程手册" 本手册为 Linux 多线程编程提供了详细的指导,涵盖了多线程基础介绍、多线程术语定义、多线程标准、多线程的益处、提高应用程序的响应、有效使用多处理器等方面的内容。 1. 多线程基础介绍...

    JAVA多线程编程技术PDF

    这份“JAVA多线程编程技术PDF”是学习和掌握这一领域的经典资料,涵盖了多线程的全部知识点。 首先,多线程的核心概念包括线程的创建与启动。在Java中,可以通过实现Runnable接口或继承Thread类来创建线程。创建后...

    Windows多线程编程技术与实例(C++)(PDF)

    《Windows多线程编程技术与实例(C++)》是一本深入探讨Windows环境下多线程编程的书籍,特别适合正在学习或已经从事C++多线程开发的人员阅读。本书通过丰富的实例,详细讲解了如何在Windows操作系统中利用C++进行...

    汪文君JAVA多线程编程实战(完整不加密)

    《汪文君JAVA多线程编程实战》是一本专注于Java多线程编程的实战教程,由知名讲师汪文君倾力打造。这本书旨在帮助Java开发者深入理解和熟练掌握多线程编程技术,提升软件开发的效率和质量。在Java平台中,多线程是...

    Java多线程编程实战指南(核心篇)

    Java多线程编程实战指南(核心篇) 高清pdf带目录 随着现代处理器的生产工艺从提升处理器主频频率转向多核化,即在一块芯片上集成多个处理器内核(Core),多核处理器(Multicore Processor)离我们越来越近了――如今...

    嵌入式软件开发技术:第5章 嵌入式Linux多线程编程.ppt

    嵌入式Linux多线程编程 嵌入式Linux多线程编程是嵌入式系统开发中的一种重要技术,能够提高系统的效率和响应速度。本章节将详细介绍嵌入式Linux多线程编程的基本概念、线程的创建、同步和互斥、线程属性、多线程...

    多线程编程(完整版)

    多线程编程是一种重要的软件开发技术,特别是在处理并发任务、优化资源利用率和提高程序响应速度方面。通过创建多个线程,程序可以在同一进程中并行执行不同的任务,从而提高整体效率。 在操作系统层面,进程和线程...

    Windows平台下的多线程编程

    ### Windows平台下的多线程编程:深入探讨 #### 引言 在计算机科学领域,多线程编程被视为提升软件性能和响应能力的关键技术之一。尤其在Windows平台上,多线程编程能够充分利用现代多核处理器的能力,实现并发处理...

    java 多线程编程实战指南(核心 + 设计模式 完整版)

    《Java多线程编程实战指南》这本书深入浅出地讲解了Java多线程的核心概念和实战技巧,分为核心篇和设计模式篇,旨在帮助开发者掌握并应用多线程技术。 1. **线程基础** - **线程的创建**:Java提供了两种创建线程...

    多线程编程指南.pdf

    ### 多线程编程指南:全面解析与应用 #### 多线程编程的定义与重要性 多线程编程是一种让程序能够同时执行多个任务的技术,通过在单一进程中创建多个线程来实现并发操作,从而提高了程序的效率和响应速度。这种...

    C++多线程编程.pdf

    C++多线程编程

    linux多线程编程.pdf

    Linux多线程编程是操作系统中并发程序设计的一个重要领域,它允许开发者在同一程序中创建多个线程,以实现并行执行,从而提高程序的执行效率和响应能力。Linux下的多线程编程通常基于POSIX线程(pthread)库来实现,...

    MFC多线程编程

    【MFC多线程编程】是Windows环境下使用Microsoft Foundation Class (MFC)库进行多线程应用程序开发的技术。MFC库是Visual C++提供的一种面向对象的类库,它简化了Windows API的使用,包括多线程编程。多线程在现代...

    c++多线程编程的十个例子

    以下是对“C++多线程编程的十个例子”的详细讲解,这些例子将帮助你在Windows环境下深入理解和应用多线程。 1. **创建线程** C++11引入了`std::thread`库来创建和管理线程。例如,你可以通过传递函数或成员函数...

    C#多线程编程实战完整源码

    C#多线程编程是开发高效、响应迅速的软件应用的关键技术之一,尤其在现代计算环境中,多核处理器和并发处理的需求日益增加。本资源"《C#多线程编程实战》完整源码"提供了丰富的实例,适用于学习和实践C#中的多线程...

Global site tag (gtag.js) - Google Analytics