线程状态
- 新建状态 :
Thread thread = new Thread();
线程一旦创建就进入新生状态 - 就绪状态:当调用线程的start()方法就进入就绪状态。 运行状态:进入到运行状态,线程才真正执行线程体的代码块。
- 阻塞状态:当调用sleep()、wait()或者同步锁定时,线程进入阻塞状态,阻塞状态解除后,重新进入就绪状态,等待cpu的调度。
- 死亡状态:线程中断或者结束,一旦进入死亡状态,就不能再次启动。
线程方法
方法 | 说明 |
---|---|
setPriority(int priority) | 更改线程优先级 |
static void sleep(long millis) | 在指定的毫秒数内让当前正在执行的线程休眠 |
void join() | 等待线程终止 |
static void yield() | 暂停当前正在执行的线程对象,并执行其他线程 |
线程停止
不推荐JDK提供的stop(),建议线程自己停止下来,一般用一个标志位进行终止变量,当flag=false,则线程终止运行。
public class TestStop implements Runnable{
//1.设置一个标识
private Boolean flag=true;
@Override
public void run() {
int i=0;
while (flag){
System.out.println("current thread:"+i);
i++;
}
}
//2. 设置一个公开的方法停止线程,转换标志位
public void stop(){
this.flag=false;
}
public static void main(String[] args) {
TestStop testStop = new TestStop();
new Thread(testStop).start();
for (int i = 0; i < 1000; i++) {
System.out.println("main thread:"+i);
if(i==10){
testStop.stop();
System.out.println("线程停止");
}
}
}
}
线程休眠
- sleep(时间)指定当前线程阻塞的毫秒数
- sleep存在异常InterruptedException
- sleep时间到达后进入进程线程就绪状态
- sleep可以模拟网络延迟,倒计时
- 每一个对象都有一个锁,sleep不会释放锁
public class SleepTest {
public static void countDown() throws InterruptedException {
int num=10;
while (true){
Thread.sleep(1000);
System.out.println(num--);
if(num==0)
break;
}
}
public static void main(String[] args) throws InterruptedException {
countDown();
}
}