线程状态
 
![在这里插入图片描述]()
 
![在这里插入图片描述]()
 
验证线程状态
 
import lombok.SneakyThrows;
public class Demo08 {
    public static void main(String[] args) throws InterruptedException {
        Demo08Service service = new Demo08Service();
        Demo08ThreadA t1 = new Demo08ThreadA(service);
        Demo08ThreadA t2 = new Demo08ThreadA(service);
        
        System.out.println("t1的线程状态:" + t1.getState());
        t1.start();
        
        System.out.println("t1的线程状态:" + t1.getState());
        
        Thread.sleep(500L);
        
        System.out.println("t1的线程状态:" + t1.getState());
        t2.start();
        
        System.out.println("t2的线程状态:" + t2.getState());
        Thread.sleep(5000L);
        
        System.out.println("t1的线程状态:" + t1.getState());
        Demo08ThreadB t3 = new Demo08ThreadB(new Object());
        t3.start();
        Thread.sleep(100L);
        
        System.out.println("t3的线程状态:" + t3.getState());
    }
}
class Demo08Service{
    public synchronized void doSomething() throws InterruptedException {
        Thread.sleep(3000L);
    }
}
class Demo08ThreadA extends Thread{
    private Demo08Service service;
    public Demo08ThreadA(Demo08Service service){
        this.service = service;
    }
    @SneakyThrows
    @Override
    public void run() {
        service.doSomething();
    }
}
class Demo08ThreadB extends Thread{
    private Object lock;
    public Demo08ThreadB(Object lock){
        this.lock = lock;
    }
    @SneakyThrows
    @Override
    public void run() {
        synchronized (lock){
            lock.wait();
        }
    }
}
 
suspend()
 
import lombok.Data;
public class ThreadSuspend {
    private static demo01 demo01 = new demo01();
    public static void main(String[] args) {
        ThreadSuspend ts = new ThreadSuspend();
        
        Thread t1 = new Thread(() -> {
            while (true) {
                ts.doSomething();
            }
        });
        t1.setName("AAA线程");
        t1.start();
        
        Thread t2 = new Thread(() -> {
            while (true) {
                ts.doSomething();
            }
        });
        t2.setName("BBB线程");
        t2.start();
    }
    public void doSomething(){
        demo01.printString();
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
@Data
class demo01{
    private String name = "layman";
    private String password = "12345";
    public synchronized void printString(){
        System.out.println(Thread.currentThread().getName()+"---name:"+name+" ,password"+password);
        if("AAA线程".equals(Thread.currentThread().getName())){
            Thread.currentThread().suspend();
        }
    }
}