线程的好处
1:能够合理的使用cpu资源,去完成复杂的应用程序计算
线程5种状态
1:新建状态,2:就绪状态,3:运行状态,4:阻塞状态,5:死亡状态。
线程实现方法
1:继承Thread类,2:实现Runable接口,3:实现Callable接口(需要借助FutureTask实现类),
4:线程池
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待,
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务
线程阻塞方式
1:sleep(属于Therad方法,不会释放同步锁),wait(属于Object属性,释放同步锁),join(属于Therad类,在此线程没执行完不执行后面的线程)。
线程停止方法
1:stop暴力停止线程(不推荐)2:使用intrrupt中断线程,3:使用退出标志等线程运行完
线程同步方法
1:使用synchronized关键字,使用Lock类,
区别
1:synchronized自动释放锁,Lock需手动释放。
2:synchroized少量同步时性能优于Lock,大量同步时Lock大于synoroiezd。
3:synchroized无法判断锁状态,Lock可判断锁状态。
线程死锁产生原因
1:多个任务同时执行;
2:这些任务都需要同时获得两个或以上的不同的同步资源来完成任务,并且这些资源是共享的;
3:这些线程在获得部分资源后,都不会首先主动释放;
4:线程获得了部分资源,在等待另一部分资源;另一部分资源被其它线程占用,并且在等待上述线程的资源;线程通信
1:使用volatile关键字,可见性,不保证原子性,阻止命令重排序。Atomic类可保证原子性。
2:Object wait暂停 notifly唤醒notiflyAll唤醒所有
3:Lock情况下 借助Condition类await,singal,singalAll方法