线程状态
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接口配合ThreadThread thread = new Thread(() -> { System.out.println("success"); }); thread.start(); -
FutureTask配合ThreadFutureTask<String> task = new FutureTask<>(()->{ System.out.println("======="); return "Hello World"; }); new Thread(task).start(); System.out.println(task.get()); -
使用
CompletableFutureCompletableFuture<Void> future = CompletableFuture.runAsync(() -> { System.out.println("ok"); });