您好,欢迎访问代理记账网站
移动应用 微信公众号 联系我们

咨询热线 -

电话 15988168888

联系客服
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

Thread状态

线程状态:

new–>
Thread t = new Thread();线程对象一旦创建就进入到了新生状态

start–>
当调用start()方法,线程立即进入就绪状态,但不意味着立即进入调度执行;

run–>
run()进入运行状态,线程才真正执行线程体的代码块;

sleep–>
当调用sleep(),wait()或同步锁定时,线程进入阻塞状态,就是代码不往下执行,阻塞事件解除后,重新进入就绪状态,等待cpu调度执行;

dead–>
线程中断或者结束,一旦进入死亡状态,就不能再次启动;

守护线程(daemon):

1.线程分为用户下线程和守护线程;
2.虚拟机必须确保用户线程执行完毕;
3.虚拟机不用等待守护线程执行完毕;
4.后台记录操作日志,监控内存,垃圾回收等待;

package org.example;

public class TestDaemon {
    public static void main(String[] args) {
        II you = new II();
        God god = new God();
        Thread thread = new Thread(god);
        thread.setDaemon(true);//默认是false用户线程,true为守护线程
        thread.start();
        new Thread(you).start();
    }

}
class II implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("你活着"+i);
        }
        System.out.println("goodbye");
    }
}

class God implements Runnable{
    @Override
    public void run() {
        while(true){
            System.out.println("上帝守护者你");
        }
    }
}

join

package org.example;
//Join合并线程,待此线程执行完成后,再执行其他线程,其他线程阻塞,可以想象成插队
public class ThreadJoin implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("VIP来了"+i);
        }
    }

    public static void main(String[] args) {
        ThreadJoin threadJoin = new ThreadJoin();
        Thread thread = new Thread(threadJoin);
        thread.start();
        for (int i = 0; i < 300; i++) {

            if(i==200){
                try {
                    thread.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println("main方法"+i);
        }
    }
}

Yield

package org.example;

public class ThreadYield {
    /*线程礼让,让当前正在执行的线程暂停,但不阻塞
    * 将线程从运行状态转为就绪状态
    * 让cpu重新调度,礼让不一定成功*/
    public static void main(String[] args) {
        MyYield myYield = new MyYield();
        new Thread(myYield,"a").start();
        new Thread(myYield,"b").start();
    }

}
class MyYield implements Runnable{
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+"开始");
        Thread.yield();

        System.out.println(Thread.currentThread().getName()+"结束");

    }
}

sleep

package org.example;

public class ThreadSleep {
    /*
    * sleep指定当前线程阻塞的毫秒数
    * 存在异常InterruptedException
    * 时间到达后线程进入就绪状态
    * 可以模拟网络延迟,倒计时
    * 每一个对象都有一个锁,sleep不会释放锁*/
//    模拟倒计时
    public static void main(String[] args) {
        try {
            TenDown();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }
    public static void TenDown() throws InterruptedException {
        int num = 10;
        while(true){
            System.out.println(num--);
            Thread.sleep(1000);
            if(num<0){
                break;
            }
        }
    }
}

终止线程

package org.example;
//使用外部方法使线程停止
public class ThreadState implements Runnable {
    private boolean flag = true;
    @Override
    public void run() {
        int i = 0;
        while(flag){
            System.out.println("------"+i++);
        }
    }
    public void stop(){
        this.flag = false;
    }

    public static void main(String[] args) {
        ThreadState threadState = new ThreadState();
        new Thread(threadState).start();
        for (int i = 0; i < 100; i++) {
            System.out.println("+++++"+i);
            if(i==90){
                threadState.stop();
                System.out.println("线程停止了");
            }
        }
    }
}


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进