一 线程状态
1. NEW
线程刚刚被创建时的状态。
2. RUNNABLE
NEW状态的线程调用了start()方法来启动后可能处于的状态。如果线程满足运行的状态,但还没有得到CPU调度,则处于此状态。
3. RUNNING
正在运行的线程状态。
4. TERMINATED
线程运行结束的状态。
5. BLOCKED
调用了start方法,但线程需要运行的某些资源没有得到满足时会处于BLOCKED状态。
扫描二维码关注公众号,回复:
5299127 查看本文章
6. WAITING & TIMED_WAITING
调用了wait方法的线程处于WAITING状态。WAITING状态的线程,可以通过notify方法唤醒。TIMED_WAITING除了可以通过notify唤醒外,还可以一个等待时间,超过了这个时间,线程也会自动唤醒。
二 线程运行方式
Thread t1=new Thread();
t1.run(); //不能开启线程,只是像普通代码一样在当前线程执行run里面的逻辑
t1.run(); //会开启新的线程
三 线程中断方式
1. Thread.stop();
不推荐使用。它会释放所有monitor,强行中断线程。
对于线程中有多条语句在执行,强行中断可能造成部分数据更新,部分数据没有更新,造成数据不一致
2. interrupt
public void Thread.interrupt() // 中断线程
public boolean Thread.isInterrupted() // 判断是否被中断
public static boolean Thread.interrupted() // 判断是否被中断,并清除当前中断状态
public void run(){
while(true){
Thread.yield();
}
}
t1.interrupt(); // 这种方式不会对t1造成任何影响,因为只是通知了t1,但没有告诉t1怎么做
public void run(){
while(true){
// 告知线程interrupt后如何做
if(Thread.currentThread().isInterrupted()){
System.out.println("Interruted!");
break;
}
Thread.yield();
}
}