多线程总结知识点

多线程:
 * 计算机程序执行原理
 * CPU(寄存器,控制器,运算器),内存,硬盘,光盘
 * 程序,进程,线程
 * 程序:就是指我们写的保存在硬盘当中的静态文件叫程序
 * 进程:程序被加载进内存,准备或者正在运行的,就叫进程
 * 线程:就是程序中不同的执行路径
 *
 * 进程:只要程序加载了,就会在操作系统注册一个进程号(PID)
 *   
 *   程序代码,在没有被调用之前,都是以静态文件方式保存在硬盘中的,我们调用的时候,就会从硬盘载入到内存中
 *      这个时候就认为开启了一个进程
 *      进程是一个操作系统的概念
 *
 *  线程:当我们程序开始执行的时候,就是java中main()开始执行,在栈内存开辟main()栈帧的时候,就是开启了一个线程
 *   一个线程就是里面的一个栈和链式栈帧,一个栈帧就对应一个方法
 *   cpu时间片:Ghz:一秒钟一亿次,把5次执行的时间当成一个基本单位,这5次执行的时间就是一个时间片
 *   然后,给每个进程不同的时间执行,也许相同哦,谁来决定是操作系统决定的
 *   操作系统靠什么来决定:靠的是写程序的时候,给进程指定的程序优先级
 *   为什么有多线程?
 *   人的需求,可以多线程解决
 *   因为有多核CPU,需要提高程序的执行效率
 *
 *   一切皆对象,那就是一切皆类

/**
 * 创建线程的第一种方式
 *    第一步:继承java.lang.Thread;
 *    第二步:重写run(),为什么要重写,因为run()就相当于新线程中的main(),是程序执行的起点和终点
 *
 *    三个要点:
 *      线程的定义:程序不同执行路径,从代码的角度就是一个类,从内存的角度就是一个新的栈,也就是一个新的栈帧链表
 *
 *      线程必须要先启动:start();
 *
 *      一旦开启多线程,这个时候,说代码是从左到右,从上到下执行这句话就不准确了,因为,我们开启了两个线程,在每个线程的内部,仍然是从上到下,从左到右,但是线程之间的代码,没有固定的先后顺序,他们执行的先后顺序是不确定的,和cpu操作系统和我们的设置都有关

*  第二种方法:
 *  创建了一个Thread,实现java.lang.runnable,并实现了接口的run()方法
 *  并且调用start();
 *  不过不调用run();相当于单线程
 *  启动一个线程只能是,Thread类的start();
 *
 *  创建新线程有两种方法,但是启动只有一种方法,Thread的start();

/** 线程的生命周期:
 *      我们的内存分析图,分析了一下单线程程序的生命周期,本质是main()线程所在的栈生命周期,说白了,也就是main()生命周期
 *  非主线程的生命周期:
 *      run()本质就是run()所在的栈的生命周期,也就run()方法的生命周期.
 *      创建/激活
 *      就绪
 *      运行--执行/不执行
 *      阻塞
 *      复活
 *      死亡
 *
 * 线程类的常用方法:
 *  setName();给线程取名字
 *      不设置的话是Thread-0,依次累加
 *  getName();获得当前线程的名字
 *  static currentThread():获得当前线程的内存地址
 *  static sleep():让当前的线程睡眠指定的毫秒数
 *
 *  setPriority():设置线程的优先级,
 *      java中线程的优先级有0-10 11个级别
 *      win当中是1-7 7个优先级
 *      Unix:2^31;
 *  MIN_PRIORITY : 1
 *  MAX_PRIORITY : 10
 *  NORM_PRIORITY : 5

优先级的等级默认是5级

线程的合并:
   对象名.join();//当有join()的时候,谁调用的就先输出谁的,相当于方法的调用,不是线程的问题了,变成了单线程问题,又按照从上往下执行
线程的让位:
   Thread.yield();
 *    1  这是一个静态方法,意味着即使用对象调用他,他也会低层转化为类名调用,听到的也是当前类偶在的线程,也就是说在那个类中调用,就停止那个类的线程
 *    2 给同一个优先级的线程让位,不同优先级的不让位
 *    3 和sleep()方法相同,那个线程调用就停止那个类的线程,但是没时间,不固定,只是让出当前这个时间片,下一个时间片让不让另说
 *    现成的默认优先级:
 *       子线程默认继承父类的优先级
 获取优先级:
 getPriority():调用这个方法,返回的是获得的优先级的等级数

先写一些基本的知识点和方法,尤其是前面的定义对多线程的理解很有帮助,只有理解了定义,才能更深一步的了解多线程,以后总结了更多的知识会即使和大家分享,希望对大家有帮助!

时间: 2024-10-22 22:12:06

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

Java基础学习之-多线程学习知识点的学习

Java语言从设计之初就把多线程作为语言的核心, 至少从以下几点可以看出: 1. Object对象的wait和notify机制. 2. Thread类在lang包中. 3. synchronized volatile关键字. 虽然多线程是Java语言本身的特性,但是线程并不是Java语言独有的东西,而是操作系统的特性.Java在语言层面进行了封装,使其使用更简单. 多线程存在的价值在哪里呢? 内存读写,磁盘IO, 网络传输的速率远远低于CPU处理数据的速度.所以在大部分场景下,CPU是闲置的.有

多线程随笔知识点总结3

pthread演练 1.基本概念 pthread是POSIX多线程开发框架,是跨平台的C语言框架,在苹果的头文件中并没有太多的注释 2.演练 #import <pthread.h> // 创建线程,并且在线程中执行 demo 函数 - (void)pthreadDemo { /** 参数: 1> 指向线程标识符的指针,C 语言中类型的结尾通常 _t/Ref,而且不需要使用 * 2> 用来设置线程属性 3> 新建立的线程执行代码的函数 4> 运行函数的参数 返回值: -

多线程随笔知识点总结2

多线程原理 1.使用多线程目的:将耗时操作放在后台去执行,待执行完成后,通知主线程更新UI 2.原理: 单核CPU:同一时间,CPU只能处理一个线程,换而言之,在同一时间内只有一个线程在执行 多线程同时执行:CPU快速的在多个线程间的切换;CPU调度线程的时间足够快,就造成了多线程同时执行的效果 如果线程非常多的时候:CPU会在N个线程之间切换,消耗大量的CPU资源,每一条线程调度的次数会降低,线程的执行效率也会降低 3.多线程的优缺点 优点:可以适当提高程序的执行效率;提高资源的利用率(CPU

多线程随笔知识点总结1

多线程概念 1.异步与同步 异步:多个任务操作可以同时执行适应传输数据量大,在连接过程中UI不“冻结”; 同步:代码从上到下,按顺序依次一步一步的执行,当请求的数据量小时,同步连接是一个很好的选择.UI“冻结”是它的一个缺点. 2.进程与线程 进程:进程是系统中正在运行的一个程序,每一个进程都是独立的,都运行在其专用且受保护的内存空间内,通过活动监视器可以查看mac系统中所有开启的进程 线程:线程是进程的基本执行单元,进程的所有任务都在线程中执行,一个进程至少要有一条线程,当程序启动时会默认开启

Java多线程入门知识点梳理

前言 在多核时代,高并发时代,对系统并行处理能力有很高要求.多线程就是这个时代最好的产物.通过使用多线程可以增强系统并行处理能力,提高CPU资源的有效利用:从而提高系统的处理能力.常见应用场景如:多窗口售票.生产消费模式.异步提交信息(如日志.发送消息),只要系统需要并行任务处理的场景都可以考虑使用多线程.当然它也有缺点,线程由CPU调度.程序员无法干涉.多线程的随机性,这就会增加不可控性,得出的数据重复.错乱等现象...这篇文章是从关键点上进行整理...后续会针对相关关键点制作相关系列文章..

python并发编程之多线程基础知识点

1.线程理论知识 概念:指的是一条流水线的工作过程的总称,是一个抽象的概念,是CPU基本执行单位. 进程和线程之间的区别: 1. 进程仅仅是一个资源单位,其中包含程序运行所需的资源,而线程就相当于车间的流水线,负责执行具代码. 2. 每个进程至少包含一个线程,由操作系统自动创建,称之为主线程 3. 每个进程可以有任意数量的线程 4.创建进程的开销要比创建进程小得多 5. 同一进程的线程间数据是共享的 6.线程之间是平等的,没有子父级关系,同一进程下的各线程的PID相同 7. 创建线程的代码可以写

[Java复习05] 多线程&amp;并发 知识点补充

0. wait/notify/notifyAll的理解? wait:让持有该对象锁的线程等待: notify: 唤醒任何一个持有该对象锁的线程: notifyAll: 唤醒所有持有该对象锁的线程: 它们 3 个的关系是,调用对象的 wait 方法使线程暂停运行,通过 notify/ notifyAll 方法唤醒调用 wait 暂时的线程. 它们并不是 Thread 类中的方法,而是 Object 类中的,为什么呢? 因为每个对象都有监视锁,线程要操作某个对象当然是要获取某个对象的锁了,而不是线程

多线程随笔知识点总结-NSThread4.1

线程的状态 状态说明 a.新建 实例化线程对象 b.就绪 向线程对象发送start消息,线程对象被加入可调度线程池等待CPU调度;detach方法和performSelectorInBackGround方法会直接实例化一个线程对象并加入可调度线程池 c.运行 CPU负责调度可调度线程池中的任务执行 线程执行完之前,状态可能在就绪和运行之间来回切换 d.阻塞 当满足某个预定条件时可以,可以使用休眠或锁阻塞线程执行 sleepForTimeInterval:休眠指定时长 sleepUntilDate

Java中多线程知识点总结

Java中有一个比较重要的知识点是多线程,废话就不说了,直接进入多线程的知识点.对多线程我们需要了解和知道一下的知识点:多线程的实现,多线程的安全性,多线程的线程通信,守护线程和线程的优先级等知识点. 首先,我想写点我对多线程的一点认识,其中说的语言不会很官方,但是我相信里面绝对没有坑,不会把大家带到歧途上去的.首先多线程的出现是为了更好的利用计算机的资源,提高程序的响应速度.多线程的运行由操作系统来控制,多核和单核的cpu执行同一个多线程程序的过程可能会不同,在单核中多线程程序只能在单核之间切