• 线程


    线程的生命周期

    • new() 出生
    • start() 就绪 等待CPU调度
    • Running 运行
    • wait() 等待
    • sleep() 休眠
    • IO请求阻塞
    • stop() 死亡

    线程的优先级和线程的调度

    • 优先级
    类型 名称 说明
    static int MAX_PRIORITY 最大优先级为10
    static int MIN_PRIORITY 最小优先级为1
    static int NORM_PRIORITY 默认优先级5
    void setPriority(int newPriority) 设置优先级1~10

    线程的优先级只代表,该线程获得CPU调度的概率,是个概率事件,不一定优先级大的就一定先获得CPU的执行

    什么是守护线程

    setDaemon() //守护线程,就是主线程结束他就结束

    • 线程的调度

    正在执行的线程调用yield方法,使其他线程有获得CPU执行的机会

    • 多线程的实现
    • 继承Thread类,重写run()方法
    • 实现Runnable接口,实现run()方法 (推荐做法)
    class MyThread1 extends Thread{
        public void run(){}
    }
    
    class MyThread2 implements Runnable{
        public void run(){}
    }
    //启动多线程
    MyThread1 t1 = new MyThread1();
    t1.start();
    
    Thread t2 = new Thread(new MyThread2());
    t2.start();
    

    线程的终止

    • 已经停止使用stop() suspend()方法
    public void run(){
        while(true){
            doSomeWork();
            if(flag){ //flag为外部的某些条件,满足的时候停止执行
                break;
            }
        }
    }
    
    public void run(){
        while(!flag){ //flag为外部的某些条件,满足的时候停止执行
            doSomeWork();
        }
    }
    

    线程的同步

    • 线程之间的一种制约关系
    • 线程的互斥是指,访问共享资源时,单个线程的排他性
    • 同步方法
    public synchronized 返回值类型 方法名(){
        
    }
    
    • 同步块
    synchronized(互斥对象){
        
    }
    
    wait(); 使线程进入阻塞状态,释放锁
    notify(); 使线程进入可运行状态
    //通过类的监视器实现
    
    • 每个类都有一个监视器 (monitor)

      • 可以理解为是一个房间的所有墙
        线程之间的通信
    graph LR
    a[PipedWriter/PipedOutputStream]-->b[管道]
    b-->c[PipedReader/PipedOutputStream]
    
    • 管道是单向的
      • 实现两个线程之间的通信必须建立两条管道
    • 传输的数据的顺序是严格且有顺序的,接收方接受到的顺序和发送方发送的顺序是一致的

    死锁问题

    • 经典的哲学家问题
  • 相关阅读:
    Macos同时配置github与公司内部使用的gitlab
    position跟display、margin collapse、overflow、float这些特性相互叠加后会怎么样?
    Echarts实现嵌套双环饼状图
    MySQL 8.0.19安装教程(windows 64位)
    解决ECharts Can't get dom width or height!无法初始化图表的问题
    maven项目的pom.xml提示Missing artifact traffic-iso.sdk:sdk:jar:0.0.1
    ES6数组去重的常用方法
    uni-app中设置全局变量和动态修改全局变量
    彻底搞懂$router 和 $route
    onselectstart
  • 原文地址:https://www.cnblogs.com/fiwen/p/9005398.html
Copyright © 2020-2023  润新知