创建和启动线程的方式
方式1:使用 Thread类或继承Thread类
方式2:实现 Runnable 接口配合Thread
方式3:使用FutureTask 配合 Thread
多次调用一个线程的start方法会怎么样?
start()方法不能重复调用,如果重复调用会抛出异常
说说线程的状态
初始
、运行
、阻塞
、等待
、超时等待
、终止
现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?
可以利用join()
方法实现,把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行
如何正确终止正在运行的线程?
1、线程通过方法isInterrupted()来进行判断是否被中断
2、静态方法Thread.interrupted()来进行判断当前线程是否被中断
线程的等待通知机制
① Object#wait/notify/notifyAll
等待通知机制可以基于对象的wait
和notify
方法来实现,在一个线程内调用该线程锁对象的wait方法,线程将进入等待队列进行等待直到被唤醒。
② LockSupport#park/unpark
LockSupport是JDK中用来实现线程阻塞和唤醒的工具,线程调用park
则等待“许可”,调用unpark
则为指定线程提供“许可”