创建线程的两种方式:
一.创建类继承Thread重写run方法,调用start()方法
由于java是单继承的,这导致若继承了线程就无法再继承其他类入复用方法,这在实际开发中很不方便
直接重写run方法来定义线程任务会导致线程与任务存在一个必然的耦合关系,不利于线程的重用。
二. 创建类实现Runnable接口重写run方法,实例化 Thread ( Runnable )类传参Runnable,调用 start() 方法
线程的方法:
static Thread currentThread() 获取运行这个方法的线程
static void Thread.sleep(int time) 休眠当前正在执行的线程,time休眠的毫秒数
void Interrupt() 中断阻塞或睡眠
void setPriority(int)设置线程优先级(1-10)默认5
void setDaemon(true) 设置为守护线程
void join() 该方法允许调用这个方法的线程在该方法所属线程上等待(阻塞),直到该方法所属线程结束后方可解除阻塞继续运行
线程池 ExecutorService
作用:控制线程数量,重用线程
线程池的创建:
ExecutorService threadPool = Executors.newFixedThreadPool(50) 创建固定个数的线程,懒汉式
线程池的使用:
threadPool.execute(Runnable) 添加一个任务到线程池
threadPool.shutdown() 线程池不再接收新的任务,并且会将当前线程池已缓存任务全部执行完毕后停止
threadPool.shutdownNow() 线程池会立即调用内部线程的中断方法并停止线程池。