线程停止与休眠

线程状态

线程停止与休眠

  • 新建状态 :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();
    }
}
上一篇:Python -- 函数返回值使用缓存


下一篇:Python高级培训——Num5之定时器