1.启动线程的有几种方式?
只有两种方式可以启动线程,在一点在Thread类注释里有写明
第一种是继承自Thread类,重写run方法,调用start方法启动线程。
第二种是实现Runnable接口,重写run方法,在 创建线程时当作参数传入。
2.线程stop方法为什么不建议使用
调用stop方法会让线程强行停止,尽量使用interrupt中断来结束线程。
3.stop(),interrupt(),isInterrupted(),Thread.Interrupted()这些方法有什么区别
stop方法会使线程强行停止,可能会导致某些操作没有完成。
interrupt()只是给线程打上一个中断的标志位,并不会停止线程。
isInterrupted()和Thread.Interrupted()的区别是后者判断之后会把标志位改成false。
4.Thread和Runnable的区别
Thread是对线程概念的抽象,Runnable是对业务、任务的抽象。
5.调用多次start方法会发生什么
多次调用start方法会抛出异常
6.run和start方法的区别
调用了start方法才算是真正的启动了线程,run方法是真正做业务逻辑的地方,甚至可以当作一个普通类的方法来调用。
7.join(),yield()的区别
join方法会让本线程强行插队,例如有线程A和B,当B调用了join方法,会把正在运行状态的A线程强行退回到等待状态,直到B线程运行完成再继续运行。
yield方法会让出CPU执行权,但是并不能保证其他线程就会抢到,有可能还是会让当前线程继续执行