线程学习知识点总结

说起线程,咱们得先了解一下几个词语:线程,进程,程序,多线程,多进程。

  • 程序:是操作系统中实现多个功能的代码块,也叫软件
  • 进程:计算机上正在运行的程序
  • 线程:进程内的一个执行单元,也是进程内的可调度实体
  • 多进程:在计算机中并发运行的运行的多个进程
  • 多线程:在单个程序中同时运行多个线程完成不同的工作
  • 并发:计算机的cpu在运行程序的时候,会将时间划分为多个时间片段,而在这些时间片段中,每个时间片段中只能执行一个线程,对于线程来说,它们执行的时候是断断续续,走走停停的,但在宏观上来看,它们是一起执行的,像这样的多个进程同时执行,我们就称之为“并发”,一般发生在一个处理器中。
  • 并行: 在多个处理器中,每个处理器之间执行任务是互不影响的,在微观上来看它们是同时执行的。

线程的状态

  线程的状态至少有四种:新建状态,就绪状态,运行状态,(阻塞状态),死亡状态

  1.新建状态

    当线程被(new)创建的时候,此时的线程的状态为新建状态

      线程的创建方式有三种(有的书还有资料说只有两种)

        ①:继承Thread类

          通过继承Thread类,重写run方法(线程的主方法体),调用start()方法来启动线程。 

        ②:实现runnable接口

          通过实现runnable接口(任务接口),重写接口中的run()方法(线程任务的方法体),创建线程,然后将实现类的实例作为线程参数,然后调用start()方法启动线程

        ③:通过使用FutureTask

          使用FutureTask来创建线程,然后用Callable来创建任务(即重写callable中的call()方法,返回值为null),然后将FutureTask作为参数创建线程

  2.就绪状态

    当线程创建后,线程就进入新建状态,如果不调用线程的start()方法,线程就不会进入就绪状态。调用start()方法后线程进入可运行线程池进行等待获取cpu资源

  3.运行状态

    当线程获取到cpu资源后,线程就开始运行,但是每个线程并不一定是执行完了属于自己的线程体的内容,再去执行下一个线程(当要执行完线程体内容时间过短时)。每个线程被分为为若干个片段,它们获取到的cpu资源不能被其一直占有,它们运行的时候是走走停停,达到所谓的并发执行,且它们的执行次序与其获取cpu资源的概率(能力)有关,获取的概率越大,就执行的次数越多。

  4.死亡状态

    当线程的方法体执行完毕

  5.阻塞状态(并不是每一个线程都会有这种状态)

    ①.等待阻塞:当前线程所占用的cpu资源被剥夺,等待再次获得cpu。线程休眠

    ②.同步阻塞:锁对象被其他线程占用,当前线程等待其他线程释放锁对象

    ③.其他阻塞:sleep(),join().

附录:常用方法

线程中常用的方法

void run()


如果这个线程使用单独的Runnable运行对象构造,则调用该

Runnable对象的run方法; 否则,此方法不执行任何操作并返回

void start() 导致此线程开始执行; Java虚拟机调用此线程的run方法。

long getId()

返回此线程的标识符 String getName() 返回此线程的名称
int getPriority() 返回此线程的优先级 Thread.State getState() 返回此线程的状态
void interrupt() 中断这个线程 void setDaemon() 设置为守护线程
void join() 等待这个线程死亡 void sleep(long miles)
导致正在执行的线程以指定的毫秒数加上指定的纳秒数来暂停

(临时停止执行),这取决于系统定时器和调度器的精度和准确性

原文地址:https://www.cnblogs.com/xiao-bd/p/9689004.html

时间: 2024-10-05 05:04:57

线程学习知识点总结的相关文章

黑马程序员_毕向东_Java基础视频教程_Java基础学习知识点总结

黑马程序员_毕向东_Java基础视频教程 Java基础学习知识点总结 2016年01月06日  day01 一.基础知识:软件开发 1.什么是软件?软件:一系列按照特定顺序组织的计算机数据和指令的集合. 2.常见的软件:系统软件:如:DOS,Windows,Linux等.应用软件:如:扫雷,迅雷,QQ等. 3.什么是开发?制作软件. 二.基础知识:人机交互方式 4.软件的出现实现了人与计算机之间的更好的交互. 5.交互方式:图形化界面:这种方式简单直观,使用者易于接受,容易上手操作.命令行方式:

Java线程学习经典例子-读写者演示

Java线程学习最经典的例子-读写者,主要用到Thread相关知识如下: -         线程的start与run -         线程的休眠(sleep) -         数据对象加锁(synchronized) -         数据对象的等待与释放(wait and notify) 程序实现: -ObjectData数据类对象,通过synchronized关键字实现加锁,在线程读写者中使用. -ConsumerThread消费者线程,读取数据对象中count值之后,通知生产者

黑马程序与----java线程学习

线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元.一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成.另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源.一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行.由于线程之间的相互制约,致使线程在运行中呈现出间断性.线程也有就绪.阻塞和运

算法学习知识点

 ACMer必备知识(这么多呀,慢慢学了-- 图论 路径问题 0/1边权最短路径 BFS 非负边权最短路径(Dijkstra)   (可以用 Dijkstra解决问题的特征) 负边权最短路径   Bellman-Ford Bellman-Ford的 Yen-氏优化 差分约束系统 Floyd 广义路径问题   传递闭包 极小极大距离 /极大极小距离 Euler Path / Tour 圈套圈算法 混合图的 EulerPath / Tour  Hamilton Path / Tour 特殊图的

Linux线程学习(二)

一.Linux进程与线程概述 进程与线程 为什么对于大多数合作性任务,多线程比多个独立的进程更优越呢?这是因为,线程共享相同的内存空间.不同的线程可以存取内存中的同一个变量.所以,程序中的所有线程都可以读或写声明过的全局变量.如果曾用fork() 编写过重要代码,就会认识到这个工具的重要性.为什么呢?虽然fork() 允许创建多个进程,但它还会带来以下通信问题:如何让多个进程相互通信,这里每个进程都有各自独立的内存空间.对这个问题没有一个简单的答案.虽然有许多不同种类的本地IPC (进程间通信)

Java线程学习笔记(二) 线程的异常捕捉

线程异常的捕捉: 正常的情况下,我们在main()方法里是捕捉不到线程的异常的,例如以下代码: public class ExceptionThread implements Runnable{ @Override public void run() { throw new NullPointerException(); } public static void main(String[] args) { ExecutorService executorService = Executors.n

Java线程学习笔记(一)

一.线程的创建方式: 老掉牙的话题了,继承 java.lang.Thread父类或者实现Runnalbe接口,这里就提一句: class Thread implements Runnable Thread也是继承了Runnable接口的,Runnable才是大哥. 重写run(),run()里放的都是具体的业务,包括对线程的具体操作. class Thread1 implements Runnable { int i; Thread1(int i) { this.i = i; } @Overri

Linux线程学习

线程基础 进程 系统中程序执行和资源分配的基本单位 每个进程有自己的数据段.代码段和堆栈段 在进行切换时需要有比较复杂的上下文切换 线程 减少处理机的空转时间,支持多处理器以及减少上下文切换开销, 比创建进程小很多 进程内独立的一条运行路线 处理器调度的最小单元,也称为轻量级进程 可以对进程的内存空间和资源进行访问,并与同一进程中的其他线程共享 线程相关的执行状态和存储变量放在线程控制表内 一个进程可以有多个线程,有多个线程控制表及堆栈寄存器,共享一个用户地址空间 多线程同步问题 线程共享进程的

深度学习知识点记录

记录深度学习知识点 相关源码:https://coding.net/u/chenxygx/p/FrameworkResearch/git/tree/master/AI 参考: TensorFlow深度学习,一篇文章就够了 TensorFlow.MXNet.PaddlePaddle 对比 TensorFlowSharp入门使用C#编写TensorFlow人工智能应用 &