1.多线程:多任务同事进行,如果需要多线程才使用,不需要则无需使用
优点:提高效率,完善功能
缺点:开发复杂,可能出现不安全情况
1.1线程和进程的区别
1)每个进程都有自己独立的代码和数据空间,内存空间
2)一类线程共享进程的资源
3)一个进程包含一到多个线程
4)进程是资源分配的最小单位
5)线程是cpu调度的最先单位
1.2多线程的创建方式
1)继承Thread类,重写run()方法+start()开启多线程
2)实现Runnable接口,重写run()方法 --- 推荐使用
a.避免了单继承的局限性
b.实现资源共享
3)实现Callable接口,重写call方法
a.使用麻烦
b.抛出异常,具有返回值
2.线程的状态
新生:new Thread(),创建一个线程
就绪:start(),就绪不是运行,就绪状态的线程会处于就绪队列当中,等待cpu的调度
运行:当cpu为某个线程分配时间片,这个线程开始执行
阻塞:sleep(),阻止线程的正常执行,等待阻塞解除
终止:线程结束
注意:
1)如果一个线程一旦终止,没有办法恢复,就算重新开始也不是原来的线程
2)阻塞状态解除,没有办法直接恢复运行状态,都会进入就绪状态
如何使线程进入到终止状态
1)执行完毕 2)通过外部干涉 3)调用stop()|destory() 4)调用外部标识判断
如何使线程进入到就绪状态
1)start()
2)阻塞状态解除直接进入就绪状态
3)yield()礼让线程,静态方法-->可以放大对方执行的可能性
4)线程切换,被切换的线程直接进入就绪状态
如何使线程进入到阻塞状态
1)sleep()
2)join() 插队线程 | 合并线程
3)wait()
4)IO操作
sleep(毫秒数) 线程睡眠,静态方法
可以放大问题发生的可能性
模拟网络延迟
使程序进入阻塞状态,让出cpu的资源,如果遇到对象锁的情况,sleep()抱着对象资源睡觉,不会释放对象锁
2.1线程的状态 getState() 返回枚举类型的状态信息
优先级: 提高|降低可能性,不能取决定性作用
1~10之间的数字表示线程的优先级 1最小 10最大 默认是5
static int MAX_PRIORITY:-->线程可以具有的最高优先级
static int MIN_PRIORITY:-->线程可以具有的最低优先级
static int NORM_PRIORITY:-->分配给线程的默认优先级
setPriority()设置线程的优先级别
getPriority()获取线程的优先级别