想要使用线程有两种方法:
一是继承Thread类,二是实现Runnable接口。根据单继承和多实现的特性具体情况具体使用,两种的效果是一样的。
线程的特性:
(1)线程的调用是随机的。
(2)执行start()方法的顺序不代表线程启动的顺序。
(3)数据共享的情况就是多个线程可以访问同一个变量,会产生“非线程安全”问题,此时需要通过加锁 来保证线程安全。
(4)currentThread()方法可返回代码正在被哪个线程调用的信息。
(5)isAlive()方法的功能是判断当前的线程是否处于活动状态。
(6)sleep()方法的作用是在指定的毫秒数内让当前“正在执行的线程”休眠(暂停执行)。
(7)getId()方法是取得线程的唯一标识。
(8)Thread.stop()方法用于停止线程,但是这个方法是不安全的,而且是已被弃用作废的。大多数停止一个线程的操作使用Thread.interrupt()方法,这个方法不会终止一个正在运行的线程,还需要加入一个判断才可以完成线程的停止。
(9)this.interrupted():测试当前线程是否已经是中断状态,执行后具有将状态标志清楚维false的功能;this.isInterrupted():测试线程Thread对象是否已经是中断状态,但不清楚状态标志。
(10)使用stop()释放锁将会给数据造成不一致性的结果。
(11)使用suspend()方法暂停线程,使用resume()方法恢复线程的执行。
(12)suspend 与 resume 方法的缺点:独占、不同步
(13)线程的优先级分为1~10个等级,数值越大等级越高。线程的优先级具有:继承性、规则性、随机性
(14)守护线程:典型的守护线程就是垃圾回收线程,当进程中没有非守护线程了,则垃圾回收线程也就没有存在的必要了,自动销毁。