线程3种实现方式:
1.继承Thread类,实现run方法,start启动线程<--1.创建进程类(extends Thread) 2.重写run()方法 3.创建一个进程类的对象,然后调用 start()方法 启动线程-->
2.实现Runable接口,实现run方法,需要Thread类来启动
3.实现Callable接口,实现call方法,FutureTask激活 Callable,使用Thread类来启动
4种线程池的区别:
newCachedThreadPool 缓存线程池
创建一个可缓存的线程池,如果线程池长度超过处理需要,可灵活回收空闲
线程,若无可回收,则新建线程
newFixedThreadPool 固定线程池
创建一个定义长线程池,可控制线程最大并发数,超出的线程会在队列中等待
(线程池里只能存放初始化数量的线程)
newSingleThreadExecutor 单例线程池
创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所
有任务按照指定顺序(FIFO, LIFO,优先级)执行。
newScheduledThreadPool 任务计划线程池
创建一个可定期或者延时执行任务的定长线程池,支持定时及周期性
任务执行。
(延时触发线程)
Lock锁(接口锁)和synchronized(关键字锁)的区别:
1.synchronized:(关键字锁)// 自动锁 Lock:(接口锁)//手动锁 加锁 解锁 定时锁
2.synchronized: synchronized可对实例方法、静态方法和代码块加锁,相对应的,加锁前需要获得实例对象的锁或类对象的锁或指定对象的锁 Lock: 使用实现类构造对象
3.synchronized:只能自动解锁 Lock:可以手动开锁 手动解锁 定点关锁
Sleep wait notify notifyall区别:
Sleep: Thread的方法 睡眠 不解锁
wait: Object的方法 等待 等待过程中解锁
notify: Object的方法 解锁 解一个锁
notifyall:Object的方法 解锁 解所有锁
多线程的含义:
1.与服务产生通信
2.从运行的程序种分离出来的一个平行运行线(终止程序后台运行程序后续结果)(程序优化时使用)
线程问题:
同步问题:程序中有一个资源被多个访问者同一时间访问(两个人在同一毫秒抢同一张票)
解决:加锁
Lock锁(接口锁)
synchronized(关键字锁)