• 并发编程day01


    什么是线程

    线程是操作系统能够进行运算调度的最小单位,被包含在进程之中,是进程中的实际运作单位。

    并发/高并发

    简单来说,并发是指单位时间内能够同时处理多个请求数。默认情况下Tomcat可以支持的最大请求数是150,也就是同时支持150个并发,当超过这个并发数的时候,就会开始导致响应延迟,连接丢失等问题

    影响服务器吞吐量的因素

    硬件
    cpu ,内存,磁盘,网络
    软件层面
    最大化利用硬件资源
    线程数量,jvm内存分配大小,网络通信机制,磁盘io

    线程数量如何提升服务端并发数量

    并发和并行
    并行是指两个或多个事件在同一时刻发生
    并发是指两个或多个事件在同一时间间隔内发生,这个可以冲宏观和微观两个层面来讲,如果从微观角度来看,以线程为例,假如当前电脑的cpu是单核,但是能不能支持多线程呢?当然也是能,此时如果从是多线程运行的话,那么cpu是通过不断分配时间片的方式来实现线程切换,由于切换的速度足够快,我们很难感知到卡顿的过程

    java中的线程

    Runnable接口
    Thread类
    Callable/Future带返回值

    Thread这个工具在哪些场景可以应用

    网络请求分发的场景
    文件导入
    短信发送场景

    线程的基础

    线程的生命周期
    线程的启动-》结束
    阻塞
    WAITNG
    TIME_WAITING
    BLOCKED
    IO阻塞
    JAVA的线程有多少种状态:6种
    在这里插入图片描述
    需要注意的是。操作系统中的线程除了去new和terminated状态,一个线程真实存在的状态,只有:
    ready:表示线程已经被创建,正在等待系统调度分配CPU使用权
    RUNNING:表示线程获得了CPU使用权,正在进行运算
    WAITING:表示线程等待(或者说挂起来),让出cpu资源给其他线程使用
    在加上新建状态和死亡状态,一共五种

    线程的启动

    new Thread.start();//启动一个线程
    Thread t1=new Thread()
    t1.run();//调用实例方法
    在这里插入图片描述
    线程的终止
    线程什么情况下会终止
    run方法执行结束
    volatile jint _interrupted;// Thread.isInterrupted state
    void os::interrupt(Threadthread){assert(Thread::current()==thread||Threads_lock->owned_by_self(),“possibility ofdangling
    Thread pointer”);
    OSThread
    osthread=thread->osthread();
    if(!osthread->interrupted()){
    osthread->set_interrupted(true);
    //设置一个中断状态
    //More than one thread can get here with the same value of osthread,
    //resulting in multiple notifications.We do,however,want thestore
    //to interrupted() to be visible to other threads before we execute
    unpark().
    OrderAccess::fence();
    ParkEventconst slp=thread->_SleepEvent;//如果是sleep中,唤醒
    if(slp!=NULL)slp->unpark();
    }
    //For JSR166. Unpark even if interrupt status already was set
    if(thread->is_Java_thread())
    ((JavaThread
    )thread)->parker()->unpark();
    ParkEvent*ev=thread->_ParkEvent;
    if(ev!=NULL)
    ev->unpark();
    }

    interrupt()的作用

    设置一个共享变量的值true
    唤醒处于阻塞状态下的线程。

  • 相关阅读:
    前端面试介绍 PC,H5,APP异同点
    k8s~ingress_service_endpoint_pod四壮士
    基于Vue+ELement搭建登陆注册页面实现后端交互
    基于大数据的企业岗位需求决策
    基于小脑模型神经网络轨迹跟踪matlab程序
    mysql 大表如何ddl
    UnitTest + Selenium 完成在线加法器自动化测试
    Can We Edit Multimodal Large Language Models?
    Linux系统-Ubuntu的下载和安装
    MYSQL——命令大全
  • 原文地址:https://blog.csdn.net/weixin_49349744/article/details/125495248