目录
- 创建多线程
- 线程中断
- 线程等待
- 线程休眠
- 获取线程实例
一、创建多线程:
五种方法:
- 继承 Thread, 重写 run
2.实现 Runnable, 重写 run
3.继承 Thread, 重写 run, 使用匿名内部类
4.实现 Runnable, 重写 run, 使用匿名内部类
5.使用 lambda 表达式
二、线程中断(interrupted…)
中断一个线程:
中断的意思是不是立即让线程停止,只是通知线程应该要停止,有三种状态可供选择,取决于代码的写法 「立即停止/等会停止/不停止」 -> 两个线程之间 A通知B
1.使用一个标志位来控制线程是否停止。
A通知B终止时,B是否终止 看自己 代码怎么写。 如果不写break 就不终止, 或者break 写在哪里来看被通知终止时 如何进行中断操作
2. 使用thread自带的标志位来进行判定,这里可以唤醒sleep //currentThread() =>类似于this
1.自定义标识符中断
2.使⽤ Thread.interrupted() 或者 Thread.currentThread().isInterrupted() 代替⾃定义标志位
//注意区别此处的interrupted和isinterrupted
interrupted:判断当前线程的中断标志位是否设置,调⽤后清除标志位。
isInterrupted:判断对象关联的线程的标志位是否设置,调⽤后不清除标志位
三、线程等待(join)
线程是一个随机调度的过程,等待线程做的事情就是在控制两个线程的结束顺序。 (谁先结束谁后结束 ,等待的线程会后终止)
//这段代码里t1执行完才会执行t2,有顺序结束。
四、线程休眠(SLEEP)
public static void sleep(long millis)
让线程休眠,本质上是让这个线程不参与调度(不在cpu上执行了)
线程A调用sleep 线程A就会进入休眠状态,把A从就绪队列中放到另外一个阻塞队列里,此时暂时无法参与调度(比如皇上翻牌子,某些妃子被打入冷宫 阻塞多久就相当于打入冷宫多久) 但是sleep被唤醒之后 由于考虑到调度的开销,线程不一定立即就被调度,此时实际上等待的时间大于设置的时间的。挂起(hang up)和阻塞(block) 是一个意思。
五、获取线程实例
静态方法(类方法): 不需要实例来调用,通过类名调用。
current static() 在哪个线程中调用 就能获取到哪个线程的实例: