• JAVA复习笔记之多线程并发


    前言:多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,还是值得深入研究一下

    概念:

    1 线程:进程中负责程序执行的执行单元
    线程本身依靠程序进行运行
    线程是程序中的顺序控制流,只能使用分配给程序的资源和环境

    2 进程:执行中的程序
    一个进程至少包含一个线程

    3 单线程:程序中只存在一个线程,实际上主方法就是一个主线程

    4 多线程:在一个程序中运行多个任务
    目的是更好地使用CPU资源

    线程的实现

    线程实现方式有2种:

    继承Thread类和实现Runnable接口(推荐使用)

    继承Thread

    public class VolatileTest extends Thread {
        public void run(){
            System.out.println("线程执行");
        }
    
        public static void main(String[] args) {
            new VolatileTest().start();
        }
    
    }

    实现Runnable

    public class ConsumerWorker implements Runnable {
      
      public void run() {
        
            //执行逻辑
                }
    
        }

    通过调用start()方法来启动线程,注:调用run()方法也可以执行代码,但是并没有另起线程而是在原线程中执行逻辑(start()方法可以理解为,先创建一个线程,然后该线程执行run()方法)

    线程的状态

    • 创建(new)状态: 准备好了一个多线程的对象
    • 就绪(runnable)状态: 调用了start()方法, 等待CPU进行调度
    • 运行(running)状态: 执行run()方法
    • 阻塞(blocked)状态: 暂时停止执行, 可能将资源交给其它线程使用
    • 终止(dead)状态: 线程销毁

    状态切换的方法

    start:启动一个线程,当调用start方法后,系统才会开启一个新的线程来执行用户定义的子任务,在这个过程中,会为相应的线程分配需要的资源;由创建状态变为就绪状态

    run:不需要用户来调用的,当通过start方法启动一个线程之后,当线程获得了CPU执行时间,便进入run方法体去执行具体的任务;由就绪状态变为运行状态

    wait():在指定的毫秒数内让当前“正在执行的线程”休眠(暂停执行),由运行状态进入阻塞状态,释放锁

    sleep():在指定的毫秒数内让当前“正在执行的线程”休眠(暂停执行),由运行状态进入阻塞状态,不释放锁

    yield:让当前线程交出CPU权限,让CPU去执行其他的线程。它跟sleep方法类似,同样不会释放锁。但是yield不能控制具体的交出CPU的时间,另外,yield方法只能让拥有相同优先级的线程有获取CPU执行时间的机会。由运行状态改为就绪状态

    join:主线程等待子线程执行完成之后再结束在进行

    interrupt:暂停线程

    线程的优先级

    在操作系统中,线程可以划分优先级,优先级较高的线程得到的CPU资源较多,也就是CPU优先执行优先级较高的线程对象中的任务。

    ======待续

  • 相关阅读:
    Python2+appinum基础操作封装
    appinum+python环境搭建
    Python学习-pymysql(一)
    小程序onShow事件获取options方法
    css中content-box和border-box当宽度为百分比时的位置区别,vw和%区别
    JavaScript
    canvas入门基础,七巧板、五角星、粒子时钟等
    JavaScript 自适应轮播图
    css使用padding-bottom百分比进行提前占位,防止抖动
    Dreamweaver配色方案
  • 原文地址:https://www.cnblogs.com/zwt1990/p/8352844.html
Copyright © 2020-2023  润新知