java线程相关

40 阅读1分钟

线程状态

  • New:初始状态,创建了线程对象,但未调用start()方法
  • Runnable:可运行状态,调用start()方法后,线程进入就绪状态,等待cpu调度
  • Blocked:阻塞状态,线程没有获取到锁
  • Waiting:等待状态,需要被显示唤醒才能继续执行
  • Timed Waiting:线程进入了等待状态,但超时后会被唤醒
  • Terminated:线程执行完成或异常退出

线程方法

  • 获取当前的cpu核心数:Runtime.getRuntime().availableProcessors()

  • join方法:等待该线程执行完,主线程再继续执行,可以控制线程同步:t1.join(); // 等待t1线程执行完主线程再执行

  • sleep和yield区别:

    • 线程的sleep()yield()方法都不会释放对象锁
    • sleep会让线程进入Timed Waiting状态,休眠结束后也不会立即执行,先进入可运行状态
    • yield会让线程从运行状态进入就绪状态
  • sleep和wait区别:

    • wait会释放锁,sleep不会释放
    • wait需要显示被唤醒,sleep可以自己恢复运行

创建线程

  • Runnable接口配合Thread

    Thread thread = new Thread(() -> {
        System.out.println("success");
    });
    thread.start();
    
  • FutureTask配合Thread

    FutureTask<String> task = new FutureTask<>(()->{
        System.out.println("=======");
        return "Hello World";
    });
    
    new Thread(task).start();
    System.out.println(task.get());
    
  • 使用CompletableFuture

    CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
        System.out.println("ok");
    });