java 多线程

概念:

        程序: 静态的代码

        进程: 运行的静态代码需要占用空间,进程存在动态的过程:存在产生,存在和消亡的过程

        线程:线程是由进程创建的,是进程的实体

                单线程:同一个时刻,只允许执行一个线程

                多线程:同一时刻,可以执行多个线程

        并发:同一个时刻,多个任务交替执行

        并行:同一个时刻,多个任务同时执行

线程的机制:

        主线程结束,其他的子线程如果还在存活,子线程并不会死掉,影响服务

        子线程中也可以再创建线程

        所有的线程都结束的情况下,进程才会挂掉

     线程启动的时候为什么调用的是run方法而不是start()方法

     run方法就是一个普通方法,是一个串行化的执行

     start方法才是执行真正的线程,并不会进行阻塞

     native代表java 调用由非java语言实现的功能或者接口

     start() 方法调用start0()方法后,该线程不一定会立马执行,只是将线程变成了可运行状态,具体什么时候执行,取决于cpu,由cpu统一调度。

      start0是由jvm来调用,jvm不同的操作系统算法是不同的

      实现Runable接口方式更加适合多个线程共享一个资源的情况,并且避免了单继承的限制

     线程终止:

        使用变量控制run方法退出的方式停止线程,即通知方式

    线程常用的方法:

        setName 设置线程名称

        getName 返回线程名称

        setPriority 更改线程的优先级

        getPriority 获取线程的优先级

        interrupt 中断线程 并没有真正的结束线程,所以一般用于中断正在休眠线程 使线程结束休眠

        yield:线程的礼让,让出cpu,让其他线程执行,但礼让的时间不确定,所以也不一定礼让成功

        join: 线程的插队,插队的线程一旦插队成功,则肯定先执行完插入线程的所有任务

用户线程:

        工作线程,当线程的任务执行完成或通知方式结束

        守护线程: 一般是为工作线程服务的,当所有的用户线程结束

        synchronized 同步代码 解决多线程之间的资源抢占问题

        synchronized 的原理:

                增加一把锁 

        互斥锁:

                每个对象都对应一个称为互斥锁的标记,这个标记用来保证在任一时刻,只能有一个县城访问该对象

线程的生命周期(暂时还不清楚)

同步方法如果没有static 默认锁对象为this 如果方法使用static修饰,默认锁对象:当前类.class

多个线程的锁对象为同一个即可

线程死锁:

        线程同步的时候可能出现死锁的情况

        

 

ctrl+alt+t

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值