线程状态

线程状态_第1张图片

线程状态_第2张图片

线程状态_第3张图片

  • 从卖包子的案例学习进程间的通信
public class Test {
    public static void main(String[] args) {
        Object obj=new Object();
        Thread th1=new Thread(){
            @Override
            public void run() {
               synchronized (obj){
                   System.out.println("来三个包子!");
                   try {
                       obj.wait();  //阻塞线程
                   } catch (InterruptedException e) {
                       throw new RuntimeException(e);
                   }
                   System.out.println("好嘞,吃包子!");
               }
            }
        };
        Thread th2=new Thread(){
            @Override
            public void run() {
                synchronized (obj){
                    System.out.println("好嘞,稍等五秒钟!");
                    try {
                        Thread.sleep(5000);   //进入计时等待
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                    System.out.println("包子做好啦!");
                    obj.notify(); //唤醒线程
                }
            }
        };

        th1.start();
        th2.start();
    }
}

  • 进入计时等待TimeWaitting的方式
  1. sleep(long m) ,在毫秒值结束后线程进入Runnable或者Blocked状态
  2. Wait(long m) ,在毫秒值结束之后如果还没有被唤醒,则自动唤醒进入Runnable或者Blocked状态
  • 唤醒线程
  1. notify() 随机唤醒单个线程
  2. notifyAll() 唤醒所有线程

你可能感兴趣的:(Java学习笔记,java)