IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java 线程知识点总结 -> 正文阅读

[Java知识库]java 线程知识点总结

程序、进程、线程:

程序:是指含有指令和数据的文件,被存储在磁盘或其他的数据设备中,也就是说程序是静态的代码;

进程:是程序的一次执行过程,是代码在数据集合上的一次运行活动,是系统资源分配和调度的基本单位;

线程:是进程的一个执行路径,一个进程中至少有一个线程,进程中的多个线程共享进程的资源;

线程的创建:

  1. 继承Thread创建线程:
    1. 扩展 Thread类,

      重写父类的run()方法,规定线程的具体操作

      创建扩展类的对象,调用start()启动线程

  2. ? ? ?实现Runnable接口创建线程:
    1. ??创建实现Runnable接口类,实现run()方法

      使用实现类的对象作为目标对象,创建Thread对象

      调用start()启动线程? ? ???

  3. ?使用Callable和Future创建线程(了解)
    1. 创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,且该call()方法有返回值,再创建Callable实现类的对象

      使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值

      使用FutureTask对象作为Thread对象的目标对象创建并启动新线程

      调用FutureTask对象的get()方法来获得子线程执行结束后的返回值

  4. 通过实现接口和继承类两种方式创建对象的比较:

    采用实现 Runnable、Callable 接口的方式创建多线程时,线程类只是实现了 Runnable 接口或 Callable 接口,还可以继承其他类。还便于目标对象的共享

    使用继承 Thread 类的方式创建多线程时,编写简单,如果需要访问当前线程,则无需使用 Thread.currentThread() 方法,直接使用 this 即可获得当前线程。不能再继承其他类

线程的生命周期:

?这个图讲的很详细:

  • yield()让出一次执行机会,使线程从运行状态转到可运行状态
  • join()等待这个线程结束;也就是,t.join()方法阻塞调用此方法的线程,直到线程t完成,此线程再继续;通常用于在main()主线程内,等待其它线程完成再结束main()主线程
  • ?
  • sleep方法:
  • ????????????

?

线程的同步:

  1. volatile关键字:

    简单,保证数据的可见性。就是一个线程在对主内存的某一份数据进行更改时,改完之后会立刻刷新到主内存。并且会强制让缓存了该变量的线程中的数据清空,必须从主内存重新读取最新数据。

    1. ???????

      ?
  2. synchronized关键字:对对象自动上锁

    同步普通方法(实例方法)上锁,锁是当前实例对象 ,进入方法前要获得当前实例的锁,方法执行完释放。

    同步静态方法,锁是当前类的class对象 ,进入方法前前要获得当前类对象的锁,方法执行完释放。

    同步代码块,要指定锁的对象,是可以是实例对象,也可以是类对象,进入同步代码块前要获得给定对象的锁,代码块执行完释放
    1. ???????
  3. Lock接口和 ReentrantLock类:需要?显示的获得、释放锁。实现同步更灵活

    ?? 常用方法:lock()获取锁;及unLock()释放锁

    1. ??????????????

      ?

  4. wait():的作用是让当前线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁。直到其他线程调用此对象的 notify() 方法或 ?notifyAll() 方法,当前线程被唤醒(进入“就绪状态”)

    notify()和notifyAll()的作用,则是唤醒当前对象上的等待线程;notify()是唤醒单个线程,而notifyAll()是唤醒所有的线程

?

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-23 10:43:02  更:2022-04-23 10:46:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:18:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码