线程基本概念
进程:一个正在运行的程序拥有该程序运行的所有资源,包括资源的分配和任务的调度。
线程:在进程中负责具体代码的执行,一个进程至少有一个线程
单线程:在整个程序中只有一个线程,这个线程为主线程
多线程:整个程序不止一个线程,除了主线程其它为子线程
并发:多个任务独立执行,一起执行
同步:同一时刻只能执行一个任务,该任务执行完成之后才能执行下一个任务
异步:一个线程中多个任务同时执行,一起执行
多线程:操作系统同时执行多个任务
创建线程的方式:
1)继承Thread,重写run()方法
有开辟线程的能力,资源共享方面不是很方便。
2)实现runable接口,实现该接口的run()方法
没有开辟线程的能力,要将创建的对象交给指定线程来运行
线程池:
帮助我们管理线程,我们只需要将需要执行的任务交给线程池。
线程池会根据任务的个数,执行时长,将不同的任务交给线程池中的线程来执行。
线程死锁:
多个线程因为竞争资源而造成相互等待,若无外力作用这些进程都将无法向
防止线程死锁:
1)加锁顺序
2)加锁时限
3)加锁检验
线程锁:
当多个数据访问资源时,为了数据安全,保证当一个线程访问资源时,
其它线程不能访问。等上一个线程访问完成之后才能访问。
同步锁:
synchronized(对象){
//同步代码块: 同一个对象锁下的所有线程,某个时间段内只能有一个线程在执行该代码块
}
在同步代码块内:
wait():当前线程停止运行,被同一个线程锁的其它线程唤醒之后才能接着运行
wait(时长毫秒):当前线程停止运行,当超过指定时长还没有被唤醒,就不等其它线程唤醒了,接着执行。
notify(): 唤醒同一个同步锁中某一个wait()锁
notifyAll(): 唤醒同一个同步锁中所有wait()线程
线程的生命周期:
创建(new)---就绪(start)---运行状态(等待CPU调用run方法,如果线程在运行时发生阻塞,
进入阻塞状态,之后又返回就绪状态,等待CPU的再次调用)—-结束状态(run方法执行完成)
run和start方法的区别:
start:重新开启了一个线程,不必等待其它线程执行完成。
run:只是调应了一个普通方法,没有开启线程,程序还会按照顺序执行响应代码。
还没有评论,来说两句吧...