多线程基础笔记小结
基本概念
串行:多个任务按顺序执行
并行:多个任务同时发生
并发:多个任务在同一个时间段内执行
进程和线程
进程:正在运行的程序,每个进程有自己的内存空间和系统资源
单进程:电脑一次只能运行一个程序
多进程:电脑可以同时听歌和打游戏,不是并行,是并发,是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()方法 测试当前线程是否中断,但是不会清除当前状态。

浙公网安备 33010602011771号