1. 实现多线程的方式:A. 继承Thread类 B. 实现Runnable接口
2. currentThread() : 可获取当前线程的基本信息
3. isAlive() : 测试线程是否处于活动状态(线程启动尚未终止,处于正在运行或准备运行的状态)
4. sleep() : 在指定的时间内让当前正在执行的线程休眠(不释放锁)
5. wait() : 让当前线程暂停,并释放锁,等待notify唤醒
6. thread.getId() : 获取线程的唯一标识
7. 线程是否为停止状态
a. this.interrupted() 测试当前线程是否已中断,该方法执行后会清除状态标志
b. this.isInterrupted() 测试当前线程是否已中断,该方法执行后不清除状态标志
8. 停止线程:
a. run() 执行完成后线程终止
b. stop() 作废的方法,不推荐。暴力停止:强制停止线程可能会使一些清理工作得不到完成,还可能对锁定的对象进行解锁,导致数据不同步等问题
c. interrupt() 中断线程。该方法是在当前线程中打了一个停止的标记,并不是真正的停止线程。
d. 异常法停止线程
.....
if(this.interrupted()){
throw new InterruptedException();
}
.....后续程序
如果不抛出异常后续程序还会继续执行
e. return 停止线程
同异常法,抛出异常的位置换成return(推荐使用异常法,将线程停止的异常抛出后,可以是线程停止的事件得到传播)
9. suspend() resume() 的缺点
他们用于控制线程的暂停与恢复
缺点:
a. 独占
线程调用公共类的同步方法时,将线程停止(调用suspend()),该线程不会释放同步锁,即单独占用该同步方法
b. 不同步
同时使用这两个方法暂停并恢复线程,会出现数据的不同步问题(线程A对某对象属性赋值或修改时,A对该对象的x属性进行了操作,经过暂停恢复操作之后,再对y属性操作,会导致x y 的值与你设置的值不相符)
10. yield() : 当前线程放弃cpu资源,让给其他线程,但放弃cpu资源的时间不能确定
11. 线程的优先级 : thread.setPriority(int num) 0 - 10
12. 守护线程 thread.setDeamon(true);
线程分为:用户线程 ; 守护线程【GC】