多线程基础笔记小结

基本概念

串行:多个任务按顺序执行
并行:多个任务同时发生
并发:多个任务在同一个时间段内执行

进程和线程

进程:正在运行的程序,每个进程有自己的内存空间和系统资源
	单进程:电脑一次只能运行一个程序
	多进程:电脑可以同时听歌和打游戏,不是并行,是并发,是cpu在多个任务之间来回切换
线程:线程是程序的执行单元,cpu调动的基本单位
	单线程:程序只有一条执行路径
	多线程:程序有多条执行路径

多线程的意义:提高程序的使用率,cpu的利用率

实现线程的几种方式

  • 继承Thread类
    • 重写run方法
    • 通过start调用启动
      - 建一个类,继承Thread类,重写run方法。
      - 在另一个类里把刚才那个类new出来,调用对象的start方法
      - 这是一个线程 多个线程的话要new多个对象出来 同时调用start方法
  • 实现Runnable接口
    • 重写run
    • 把该类作为参数传到Thread里
    • 通过start调用
      - 建一个类,实现Runnable接口,重写run方法
      - 在另一个类里把刚才的类new出来,再new一个Thread类出来,将刚才的对象放在Thread对象内
      - 要开多个线程的话就new多个Thread对象
      - 通过Thread对象的start方法来运行线程

开发中一般用第二种:

  • 避免java单继承的局限性
  • 适合多个相同程序代码处理同一个资源的情况

线程的命名

  • 通过setName方法来设置名字
  • (继承Thread类)在类中写一个构造方法,传一个string对象(名字)进去,构造方法内用super调用

Thread类的有参构造

  • (实现Runnable接口)在newThread的时候,将对象和线程的名字两个都传进去。
    run和start的区别
  • run:仅仅封装被线程执行的代码,直接调用的话相当于普通方法
  • start:首先启动一个线程,通过jvm调用run方法

优先级 SetPriority()

  • 优先级越高,抢到的概率越高,并不是高的一定能抢到
  • 1~10的整数,默认是5
  • 放在start之前

休眠 sleep()
加入线程 join() 会把当前线程执行完 再执行其他线程
**线程礼让 yeild() **让当前运行状态的线程释放自己的cpu资源,从运行状态变为就绪状态,然后重新和其他线程抢资源 礼让不一定成功 当线程转为就绪状态时,抢到cpu,从中断位置继续执行
守护线程(后台线程) SetDaemon(true)

  • 当所有非守护线程死亡后守护线程也会死亡,由于设备延迟,守护线程会运行一小段再死亡

中断线程

  • stop()太暴力 不建议使用
  • interrupt() 只能改变当前线程的状态为中断(true),并不能中断一个正在运行的线程,在这个基础上进入阻塞状态(sleep,wait,join),就会抛出interruptedException,中断状态被清除,重新设置为false,线程退出。 无论是先中断还是先阻塞都能达到停止线程的目的。
    this.interrupted()方法 测试当前线程是否中断(静态),会返回上一次的中断状态,并且会清除该状态,连续调用两次,第一次返回true,第二次返回false。
    this.isInterrupted()方法 测试当前线程是否中断,但是不会清除当前状态。
posted @ 2021-07-21 16:50  蘸糖  阅读(53)  评论(1)    收藏  举报