一 线程相关概念
1. 程序:
是为完成特定任务,用某种语言编写的一组指令的集合.
2. 进程
1. 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存空间
2. 进程是程序的一次执行过程,或是正在运行的一个程序.是动态过程:有他自身产生,存在和消亡的过程.
3. 其他相关概念
3. 单线程:同一个时刻,只允许执行一个线程
4. 多线程:同一个时刻,可以执行多个线程
5. 并发:同一个时刻,多个任务交替执行,造成一种"貌似同时"的错觉.简单地说,单核CPU实现的多任务就是并发
6. 并行:同一个时刻,多个任务同时执行,多核CPU可以实现并行
二 线程基本使用
1. 创建线程的两种方式
1. 继承Thread类,重写run()方法
2. 实现Runnable接口,没有返回值
3. 实现Callable接口,有返回值,可以抛出异常
4. 线程池创建:ThreadPoolExecutor或者Executors.newFixedThreadPool创建一个固定大小的线程池,可控制并发的线程数,超出的线程在队列中等待。
2. 线程状态
1. new Thread() 线程对象一旦创建就进入到了新生状态 NEW
2. start()方法被调用,线程立即进入就绪状态,但不意味着立即调度执行 TIMED_WAITING
3. sleep(),wait()方法被调用或同步锁定时,线程由运行进入阻塞状态,就是代码不往下执行,阻塞事件解除后,重新进入就绪状态,等待cpu调度执行 WAITING
4. 进入运行状态,线程才真正执行线程体的代码块 RUNNABLE
5. dead:线程中断或者结束,一旦进入死亡状态,就不能再次启动 TERMINATED
3. 线程常用方法
1. setPriority(int newPriority):更改线程的优先级
2. sleep(long millis):在指定的毫秒数内让当前正在执行的线程休眠。可以模拟网络延迟,做做倒计时。每个对象都有一把锁,sleep不会释放锁
3. join():等待该线程终止,线程的插队,线程强制执行
4. yield():暂停当前正在执行的线程对象,并执行其他线程。线程的礼让,不一定成功,看cpu心情
5. interrupt():中断线程,别用这个方式
6. isAlive():测试线程是否处于活动状态
4. 并发和线程同步
并发:同一个对象被多个线程同时操作
线程同步:线程同步其实就是一种等待机制,多个需要同时访问此对象的线程进入这个对象的等待池形成队列
为了保证数据在方法中被访问时的正确性,在访问时加入`锁机制synchronized`,当一个线程获得对象的排他锁,独占资源,其他线程必须等待,使用后释放锁即可。
4. 互斥锁
1. Java语言中,引入了对象互斥锁的概念,来保证共享数据操作的完整性
2. 每个对象都对应于一个可称为"互斥锁"的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象
3. 关键字synchronized来与对象的互斥锁练习.当某个对象用synchronized修饰时,表名该对象在任一时刻只能由一个线程访问
4. 同步的局限性:导致程序的执行效率要更低
5. 同步方法(非静态的)的锁可以时this,也可以是其他对象(要求是同一个对象)
6. 同步方法(静态的)的锁为当前类本身
5. 线程的死锁
- 基本介绍
多个线程都占用了对方的锁资源,但不肯相让,导致了死锁,在编程时一定要避免死锁的发生
6607

被折叠的 条评论
为什么被折叠?



