start();启动当前线程;调用当前线程的run()
run():通常需要重写Thread类中的此房啊,将创建的线程执行的操作声明在此方法中
currentThread():是一种静态方法,返回执行当前代码的线程
getName();获取当前线程的名字
setName():设置当前线程的名字
yield():释放当前cpu的执行权
join():在线程中调用线程b的join(),此时线程a进入阻塞状态,一直到线程执行完代码后,线程a才结束阻塞状态
stop():已过时。当执行此方法时,强制结束当前线程;
sleep(long milltime):让当前线程"睡眠"指定的milltime豪秒数,在这个时间内当前线程进入阻塞状态
isAlive():判断当前线程是否存活
线程的优先级
1
MAX_PRIORITY: 10
MIN_PRIORITY:1
NORM_PRIORITY:5 -->默认优先级
getPriority:获取当前线程的优先级
setpriority : 设置当前线程的优先级
1.生命周期:两个概念:状态,相应方法
ps:阻塞只能作为临时状态,不可以作为最终状态,死亡是最终状态;
那么怎么避免线程中这个问题呢,解决线程安全的四种方式:
同步代码块、同步方法、Lock锁、线程池
synchronized 与 Lock 异同点:在于自动释放同步监视器问题
同步代码块中注意事项:
synchrnoized中任何一个对象都可以充当锁,但是在使用时必须要共用一把锁
在实现Runnable()接口使用线程的话中我们可以考虑使用this作为同步监视器
在继承Thread类来使用线程的话,要谨慎使用this,考虑使用当前类充当同步监视器
同步方法中注意事项:
同步方法中的同步监视器不需要显式的声明
非静态的同步方法 同步监视器就是this 这个方法
静态的同步方法 同步监视器就是类本身
Java程序中使用线程的方式的优先顺序:
Lock---同步代码块(进入方法体,分配了资源)---同步方法(在方法体之外)---
同步的方式:解决了线程安全问题 ----(好处)
操作同步代码块,只能是一个线程参与,其他线程等待,相当还是一个单线程的过程
死锁和死循环需要在代码中避免的