• 多线程相关的概念


    1,程序和进程的区别

    程序是一个固定的逻辑和数据的集合,是一个静止的状态,一般存储在硬盘上。

    进程是一个正在运行的程序,是一个动作的状态,一般在内存中。

    2.进程和线程

    进程是一个正在运行的程序,有自己独立的资源分配。

    线程是一条独立的执行路径,在执行某个程序的时候,该程序可以有很多的子任务,每个线程都可以独立的完成其中一个任务。

    进程是分配资源的单位,线程不会独立的分配资源,一个进程中的所有线程共享一个进程中的所有资源。

    3.并发和并行

    并行:多个任务(线程、进程)同时进行,需要有多个cpu,多核编程。

    并发:多个任务同时发起,不能同时执行。

    4.多线程的两种实现方式

    (1)定义一个类继承Thread,重写run方法中的内容,创建这个类的对象,调用start方法,开启线程。

    此方法的实现比较简单,但是扩展性差,耦合性高,灵活性差

    (2)定义一个类实现Runnable接口,写run方法中的内容,创建这个类的对象用作任务,再调用Thread类的对象,添加任务,调用start方法,开启线程。

    此方法的实现比较复杂,但是扩展性强,耦合性第,灵活性强。

    并且将来还可以将任务类对象,提交到线程池中运行;任务类对象可以被不同线程运行,方便进行线程之间的数据交互。

    5.多线程中线程安全的问题

    (1)问题的提出:某段代码还没执行完成,cpu就被其他线程抢走,导致一些数据不完整

    (2)问题的原因:没有保证代码的原子性

    (3)希望:要么全部执行,要么全不执行。

    (4)实现:使用同步代码块synchronized(锁对象)的方式,将需要保证全都执行的代码放在其中。非静态方法的锁对象是this,静态方法的锁对象是类的字节码文件

    6.死锁

    A线程需要甲资源,同时拥有乙资源。B线程需要乙资源,同时拥有甲资源。两天线程都不肯释放资源,同时又需要其他资源,导致两条线程无法运行,造成死锁

    7.线程的生命周期

    new:新建态

    RUNNABLE:就绪态和运行态

    BLOCKED:阻塞态(等待锁、I/O)

    WAITING:阻塞态(调用了wait()方法,使用notify()可能被唤醒)

    TIMED_WAITING:阻塞态(调用了有时间限制的wait(),sleep()方法)

    TERMINATED:死亡态

  • 相关阅读:
    【HDU4676】Sum Of Gcd(莫队+欧拉函数)
    【BZOJ5084】hashit(后缀自动机水过)
    【HHHOJ】ZJOI2019模拟赛(十三)03.10 解题报告
    【BZOJ2127】happiness(网络流)
    【CCPC-Wannafly Winter Camp Day4 (Div1) J】跑跑跑路(爬山算法)
    【CCPC-Wannafly Winter Camp Day4 (Div1) H】命命命运(概率DP)
    2019.03.09 ZJOI2019模拟赛 解题报告
    关闭Android/iPhone浏览器自动识别数字为电话号码
    border-radius 在安卓手机竟然不完美支持
    validate.plugin.js 验证插件
  • 原文地址:https://www.cnblogs.com/seaWaveQin/p/13347542.html
Copyright © 2020-2023  润新知