什么是线程

是进程中的单个顺序控制流,是一条执行路径

一个程序只有一条执行路径就是单线程程序,一个程序有多条执行路径就是多线程程序

 

创建线程

继承thread类

重写run方法,封装被线程执行的代码,创建thread类的对象,调用start方法

run方法和start方法的区别:run方法直接调用,相当于普通方法的调用,start方法启动线程,由jvm调用run方法

设置和获取线程名称:setname方法,getname方法

设置和获取线程优先级:setPrioroty方法,getPriority方法

实现runnable方法

线程池

newCachedThreadPool() 可缓存

newFixedThreadPool() 可指定大小

newScheduledThreadPool() 可以控制时间和周期

newSingleThreadPool() 单个线程

参数

corePoolSize核心线程池大小:最小线程数量,即使空闲也不会被销毁

maximumPoolSize线程池最大线程数量:任务被提交到线程池以后,首先会找有没有空闲线程,如果没有则缓存到工作队列,工作队列满了则创建新新线程,不能超过线程最大数量,把队头任务交给新线程,把这个任务放到队尾

keepAliveTime空闲线程存活时间:线程空闲,且数量大于corePoolSize,则指定时间后被销毁

unit:keepAliveTime的计量单位

workQueue工作队列:新任务被提交时,如果没有空闲线程,先进入工作队列队尾

 

锁/同步

synchronize关键字

发生异常自动解锁,不会发生死锁,

不能响应中断

竞争不激烈性能好

lock接口

发生异常不会自动解锁,需要手动解锁

可以用interrupt来响应中断

竞争激烈性能好