`
sha1064616837
  • 浏览: 40416 次
  • 性别: Icon_minigender_2
  • 来自: 湖南
社区版块
存档分类
最新评论

自己对线程基础知识的整理

阅读更多
我自己对线程一章的总结:
1、线程与进程:
  1、线程是进程的组成部分,一个进程可以拥有多个线程
  2、一个程序运行后至少有一个进程,一个进程可以包含多个线程,但至少包含一个线程
  3、线程是独立运行的
  4、进程之间不能共享内存,但线程之间共享内存非常容易

2、线程的创建和启动:
  1、继承Thread类:继承Thread的对象直接创建的实例就可以代表线程对象
  2、实现Runnable接口:实现Runnable接口的对象仅仅作为Thread对象的target,而实际的线程对象依然是Thread实例,所以采用Runnable接口的方式来创建的多条线程可以共享线程类的实例属性
  3、区别:
    1、方式1已经继承Thread类,不能在继承其他父类,方式2只是实现Runnable接口,还可以继承其他类。
    2、方式1直接使用this就可获得当前线程,而方式2如果需要访问当前线程,必须使用Thread.currentThread()方法
    3、方式2 可以多个线程共享一个target对象,非常适合多个线程之间共享资源

3、run()和start()
  1、run()方法中的代码代表了线程需要执行的任务,run方法称为线程执行体。
  2、线程调用start()方法启动线程,线程进入就绪状态,表示该线程可以运行了,不一定立即运行,至于该线程何时运行,取决于JVM里的线程调度,
  3、如果直接调用线程对象的run()方法,run方法会立即执行,在run方法返回之前,其他线程都无法并发执行,此时的run方法只是一个普通方法,不是线程执行体,所以此时不能在run方法里直接通过getName()方法获得当前执行线程的名称

4、main方法的方法体代表主线程的线程执行体,所以一个main方法中至少有一条线程

5、线程的生命周期
  1、线程生命周期要经过新建、就绪、运行、阻塞、死亡五种状态
  2、线程调用start方法进入就绪状态
  3、线程进入阻塞状态:
    1、线程调用sleep方法
    2、线程调用阻塞式IO方法
    3、等待其他线程释放同步监视器
    4、线程在等待某个通知(notify)
    5、调用suspend方法线程挂起(但不会是否同步锁),不过这个方法容易导致死锁,所以程序应该尽量避免使用该方法
  4、线程从阻塞状态重新进入就绪状态
    1、调用的sleep方法的线程经过了指定的时间
    2、线程调用的阻塞式IO方法已经返回
    3、线程成功获得了等待的同步监视器
    4、线程正在等待某个通知时,其他线程发出了一个通知
    5、出于挂起状态的线程被调用了resume恢复方法
  5、线程从阻塞状态只能进入就绪状态,无法进入运动状态
  6、调用yield方法可以是当前出于运行状态的线程转入就绪状态,
  7、线程死亡
    1、run方法执行完成,线程正常结束
    2、线程抛出一个未捕获的Exception或Error
    3、直接调用该线程的stop方法,但stop方法容易导致死锁,所以不推荐使用

6、stop与suspend
  1、suspend和stop方法都容易导致死锁,所以不推荐使用
  2、suspend方法让线程进入阻塞状态,而stop方法是让线程直接进入死亡状态

7、join:
当在main函数中调用其他线程对象的join方法,主线程被阻塞,则必须等该线程执行结束之后,主线程才能继续执行

8、JVM的垃圾回收线程是一种后台线程,如果前台线程都死亡,则后台线程会自动死亡

9、Sleep与wait
  1、wait是Object类提供的方法,而sleep是Tread类中的方法
  2、Wait 方法会释放同步锁,而sleep不会
  3、都是让当前线程暂时退出运行状态

10、线程让步:yield
线程调用yield方法,让当前线程转入就绪状态,只有优先级与当前先线程相同,或者更高的线程才会获得执行的机会。

11、yield与sleep
  1、当前线程都不会释放同步监视器
  2、sleep是让线程进入阻塞状态,而yield是让线程进入就绪状态
  3、线程调用yield方法,让当前线程转入就绪状态,只有优先级与当前先线程相同,或者更高的线程才会获得执行的机会。而sleep后不会理会其他线程的优先级
  4、Sleep方法会抛出InterruptedException异常,而yield不会
  5、Sleep方法比yield方法有更好的可移植性,所以不建议使用yield来控制并发线程的执行

12、线程同步的实现方法
  1、Synchronized关键字修饰:同步代码块,同步方法
  2、使用同步锁Lock来锁定对象

13、当前线程释放同步监视器
  1、当线程在同步代码块、同步方法中遇到break\return终止了该代码块、该方法的继续执行,当前线程将会释放同步监视器
  2、当线程在同步代码块、同步方法中出现了未处理的Error或Exception,导致该代码块、该方法异常结束时将会释放同步监视器
  3、当线程执行同步代码块或同步方法时,程序执行了同步监视器对象的wait()方法,则当前线程暂停,并释放同步监视器

14、synchronized与Lock
  1、都可以实现线程同步
  2、使用Lock时,显式的使用Lock对象作为同步锁,而Synchronized同步方式中隐式的使用当前对象作为同步锁
  3、Lock对象进行同步时,必须显示的释放锁,一般在finally块中显示释放锁,而Synchronized修饰的不用

15、死锁:
当两个线程互相等待对方释放同步锁时,就会发生死锁

16、线程之间的通信
  1、wait、notify、notifyAll三方法和条件控制变量配合使用
  2、使用lock的condition条件变量(await,signal,signalAll)
  3、使用管道流

17、用程序模拟线程间的通信

18、用程序模拟死锁

分享到:
评论

相关推荐

    Java多线程和并发知识整理

    线程基础** 2.1 线程状态 Java线程有新建、可运行、运行、阻塞、等待、超时等待和终止等状态。 2.2 使用方式 可以通过`Thread`类或`Runnable`接口创建线程,使用start()方法启动。 2.3 基础机制 包括线程调度、上...

    java基础知识整理

    【Java基础知识整理】 Java是一种广泛使用的面向对象的编程语言,其基础知识构成了开发人员的基本技能集。以下是一些关键概念的详细解释: 1. **基本数据类型**:Java有8种基本数据类型,包括byte、short、int、...

    linux内核锁基础知识整理

    ### Linux内核锁基础知识整理 #### 一、文档介绍 ##### 1) 文档目的 本文档旨在系统地介绍Linux内核中的各种锁机制,并通过详细的解析帮助读者更好地理解每种锁的工作原理及其应用场景。此外,还将对这些锁机制...

    mybatis基础知识整理及源码

    MyBatis是一个优秀的持久层框架,它支持...提供的"MyBatis基础知识整理.pdf"文档应该包含了详细的理论知识,而"mybatis基础知识整理-源码.zip"则可能包含了一些关键类或模块的源代码,有助于进一步理解和学习MyBatis。

    后端开发基础知识整理JAVA、JVM、操作系统、网络、设计模式、mysql、redis、多线程、spring、springboo

    ### 后端开发基础知识整理 本篇文档对后端开发中的关键知识点进行了全面而深入的梳理,涵盖了Java语言基础、JVM、操作系统、网络技术、数据库、缓存、多线程、Spring框架等方面的核心概念和技术要点。以下是针对...

    多线程脑图整理.pdf

    以上知识点的整理和理解是学习多线程技术的基础,对于深入研究计算机科学和软件工程领域具有重要意义。在实际编程中,理解这些概念能够帮助我们编写出更加高效、稳定且易于维护的多线程应用程序。

    java多线程相关资料整理

    下面将对Java多线程的相关知识点进行详细的阐述。 1. **线程的创建** - **继承Thread类**:通过创建一个新的Thread类的子类,并重写其`run()`方法,然后创建该子类的实例并调用`start()`方法启动线程。 - **实现...

    C#多线程学习资料整理

    在.NET框架中,C#语言提供了强大的多线程支持,使得...总的来说,C#多线程编程涵盖了从基础的线程创建到复杂的同步机制,再到高效的异步编程模型。理解并熟练运用这些知识,能帮助你构建出更加高效、稳定的多线程应用。

    Java基础知识整理 初学者.zip

    这份"Java基础知识整理 初学者.zip"压缩包包含了一份名为"Java基础.gmind"的思维导图,旨在帮助初学者构建对Java基础知识的全面理解。以下是根据这个主题详细展开的知识点: 1. **Java简介**:Java是由Sun ...

    Java面试-基础知识整理.doc

    通过本文,读者可以了解Java基础知识的主要内容,包括基本语法、类相关语法、内部类语法、继承相关语法、异常语法、线程语法、集合语法、IO语法、虚拟机方面语法等。这些知识点是Java开发者的必备知识,掌握这些知识...

    Python 基础 之 python 线程知识点整理,并实现一个简单多线程 udp 聊天应用

    Python 基础 之 python 线程知识点整理,并实现一个简单多线程 udp 聊天应用   目录 Python 基础 之 python 线程知识点整理,并实现一个简单多线程 udp 聊天应用 一、简单介绍 二、能学到 三、实现思路 四、效果...

    jvm的基础知识总结

    JVM的基础知识涵盖了其内存模型、垃圾回收机制、线程模型等多个方面,下面将详细总结这些基础知识。 ### JVM内存模型 JVM内存模型主要可以分为线程共享区域和线程私有区域。 **线程共享区域** 1. 堆(Heap):...

    JAVA核心面试知识点整理

    Java是目前企业开发中最常用的编程语言之一,Java面试知识点涵盖了Java语言的方方面面,包括Java基础知识、Java高级知识、Java设计模式、Java框架等等。以下是Java核心面试知识点的整理。 一、JVM JVM(Java ...

    技术面试需要掌握的基础知识整理1

    【技术面试需要掌握的基础知识整理1】 这篇文档涵盖了多个IT领域的基础知识,主要针对技术面试的准备,包括网络、网络协议、操作系统、Linux、算法、设计模式、面向对象思想、数据库系统原理、SQL、MySQL、Redis、...

    Java多线程教程吐血整理干货.md

    ### Java多线程教程知识点详解 #### 进程和线程 进程与线程都是操作系统进行资源管理和调度的基本单位,但两者之间存在着本质的区别。进程是操作系统资源分配的基本单位,而线程则是进程内的一个执行单元。每个进程...

    JAVA核心知识点整理学习.pdf

    JAVA核心知识点整理学习 Java是一种广泛使用的高级编程语言,它的核心知识点涵盖了Java编程语言的...通过对Java核心知识点的整理和学习,我们可以更好地理解Java的基础知识和JVM的工作机制,从而更好地开发Java程序。

    JAVA核心知识点整理,涵盖JAVA基础、集合类、JVM、IO/NIO、多线程、Spring原理等知识

    ### JAVA核心知识点整理 在Java开发领域中,掌握核心知识点对于提升个人技能及解决实际问题至关重要。本文将根据提供的文件信息,对JAVA基础、集合类、JVM、IO/NIO、多线程以及Spring框架的基本原理进行深入解析,...

    Java基础知识学习--自己整理.zip

    这份“Java基础知识学习--自己整理.zip”压缩包显然是一个精心整理的Java初学者教程,包含了作者的学习笔记和心得,旨在帮助新手快速入门。下面将详细阐述Java的基础知识。 **一、Java简介** Java是由Sun ...

    总结整理的Android面试Java基础知识点面试资料精编汇总文档资料合集.zip

    总结整理的Android面试Java基础知识点面试资料精编汇总文档资料合集: Android面试 常见58题.docx Android常见原理性面试专题.docx Android面试常问基础知识点.docx BAT Android面试20题详解.docx Java基础面试题....

    大学计算机基础知识点整理.docx

    这份文档《大学计算机基础知识点整理.docx》可能涵盖了多个方面,包括计算机系统的基础架构、操作系统原理、网络技术、数据库基础以及办公软件的使用等。下面将详细阐述这些领域的关键知识点。 一、计算机系统基础 ...

Global site tag (gtag.js) - Google Analytics