线程基础

2020-04-06  本文已影响0人  打杂的_e2c9

线程创建的三种方法

Thread
Runnable
FutureTask
三种线程实现及对比

线程的等待与唤醒

wait notify

//上锁
synchronized(obj){
   while(不满足条件){
          obj.wait()
    }
}

// 唤醒
 obj.notify() / notifyAll()

等待线程执行终止的join

用于等待某些条件执行后再执行的逻辑

Thread thread1 = new Thread(new Runnable() {
           @Override
           public void run() {
               System.out.println("条件1");
           }
       });
        Thread thread2 =new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("条件2");
            }
        });
        thread1.start();
        thread2.start();

        try {
            thread1.join();
            thread2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("cccc");

线程睡眠sleep

//暂时让出指定时间的执行权,不参与cpu调度,但是该线程拥有的监视器资源比如锁还是持有不让出的
Thread.sleep(xxx)

//调用线程的 interrupt 方法会抛出 interruptExpection 异常
thread.interrupt

让出CPU的执行权yield

// 当一个线程调用yield 方法时,当前线程会让出CPU使用权,然后处于就绪状态
// 线程调度器会从就绪队列中获取一个线程优先级最高的线程,然后也有可能会调度到刚刚让出CPU的线程
Thread.yield()

线程中断

守护线程与用户线程

Java 中的线程分为两种:守护线程和用户线程。JVM会在最后一个非守护线程执行完后退出,而不关注是否还有守护线程在执行,也就是说守护线程是否结束不影响JVM退出

// 设置为守护线程
thread.setDaemon(true);
上一篇 下一篇

猜你喜欢

热点阅读