1、多线程是异步的,线程的调用是随机的
2、创建线程的两种方法:
- 继承Thread类,重写run()方法;
- 实现Runnable接口,重新run()方法;
- 如下图,Thread.java类也实现了Runnable接口
3、Thread.java类的start()方法通知“线程规划器”此线程已经准备就绪,等待调用线程对象的run()方法。
多次调用线程start()方法,会出现Exception in thread "main" java.lang.IllegalThreadStateException。
4、执行start()方法的顺序不代表线程启动的顺序。因为线程的调度是随机的
5、currentThread()方法可返回代码段正在被哪个线程调用的信息
6、isAlive()判断当前的线程是否处于活动状态。
活动状态就是线程已经启动且尚未终止。就是正在运行或准备开始运行状态。
7、sleep()是让当前“正在执行的线程”休眠(暂停执行)。“正在执行的线程”是指this.currentThread()返回的线程。
8、Java 3种终止正在运行的线程方法:
- 使用退出标志,是线程正常退出,也就是当run()方法完成后线程终止
- 使用stop()方法强行终止,不推荐。因为stop和suspend及resume都是过期作废的方法,使用可能造成不可预料的问题
- 使用interrupt方法中断线程
9、调用interrupt()方法仅仅是在当前线程种打一个标记,并不是真的停止线程
10、interrupted():测试当前线程是否已经中断。interrupted()具有清除状态的功能
11、yield()方法的作用是放弃当前的CPU资源,将它让给其他的任务去占用CPU执行时间。但放弃时间不确定,有可能刚刚放弃马上又获得CPU时间片
12、线程优先级1-10。线程优先级具有继承性,比如A线程启动B线程,则B线程的优先级和A一致
13、优先级高的线程不一定每次都先执行完。不确定性和随机性
14、在Java中有两种线程,用户线程、守护(Daemon)线程。
15、典型的守护线程就是垃圾回收线程,当进程中不存在非守护线程了,则垃圾回收线程也就没必要存在,会自动销毁。