线程类型
daemon线程: 表明为守护线程,当所有非daemon线程退出时,该类型线程自动退出。
非daemon线程: 常规线程,所有线程退出,进程结束。
Thread类创建多线程任务的方式:
1.继承Thread,override run()方法。
2.实现Runnable接口,new Thread(Runnable task)
3.实现Callable接口,new FutureTask(Callable task),(FutureTask 实现了 Runnable和Future接口)new Thread(Runnable task)
线程状态:
Thread方法
方法名,#为对象方法 | 解释 |
---|---|
Thread#yield() | 执行此方法会向系统线程调度器(Schelduler)发出一个暗示,告诉其当前JAVA线程打算放弃对CPU的使用,但该暗示,有可能被调度器忽略。使用该方法,可以防止线程对CPU的过度使用,提高系统性能 |
Thread#sleep(time);Thread.sleep(time, nanos) | 线程进入阻塞状态,但不释放锁。 |
Thread#join();Thread#join(time) | A线程调用B线程的join()方法,将会使A等待B执行,直到B线程终止。 |
Thread#interrupt() | 对thread的中断标志位(boolean)进行类似get和set操作,具体动作由用户代码逻辑完成。 |
停止线程的方法:
Tread.stop()
应使用interrupt,,isInterrupted,interrupted方法
interrupt系列方法,只是对thread的中断标志位(boolean)进行类似get和set操作,具体动作由用户代码逻辑完成。
1.interrupt方法将对处于非阻塞状态的线程的标志位标记为true,若线程处于阻塞状态,则线程将抛出InterruptedException异常,同时线程的标志位被清零(false)。
2.isInterrupted方法将返回该线程标志位(boolean)
3.interrupted方法将返回该线程标志位,然后将线程标志位清零(false){可用于响应一次中断}
结合上述方法,可灵活运用,实现线程的安全退出
注:执行IO任务类等线程无法被中断,无法抛出InterruptedException异常