黑马程序员技术交流社区
标题:
成都黑马23期
[打印本页]
作者:
阿喵呀
时间:
2019-3-21 10:03
标题:
成都黑马23期
1.多线程
线程并发包:concurrentable
多线程运行原理:
抢夺资源(CPU执行权),随机性
多线程内存:每一个执行线程都有一片自己所属的栈内存
2.Thread类的常用方法
获取线程名称的方法:
1.使用Thread类中的方法 getName()
2.可以先获取到当前正在执行的线程
static Thread currentThread()返回对当前正在执行的线程对象的引用
设置线程名称的方法:
1.使用Thread类中的方法setName()
2.创建一个带参数的构造方法,参数传递线程的名称;
sleep(long millis)睡眠等待:以毫秒计算。让正在执行的程序停止指定毫秒后再继续执行
3.创建线程方式二
实现步骤:
1.创建一个Runnable接口的实现类
2.在实现类中重写Runnable接口的run方法,设置线程任务
3.创建一个Runnable接口的实现类对象
4.创建Thread类对象,构造方法中传递Runnable接口的实现类对象
5.调用Thread类中的start方法,开启新的线程执行方法
CountDownLatch 底层维护了一个变量--->countDown减为0时 唤醒await
4.Runable的接口创建多线程的好处
1.避免了单继承的局限性
2.增强程序的扩张性,降低了程序的耦合性(解耦)
5.线程安全问题
多线程的并发问题:当多个线程在操作同一个共享数据时,就有可能发生线程安全问题
6.线程安全问题产生的原因
7.三种方法解决线程安全问题
1. 同步代码块:
格式:
Synchronized(锁对象){
可能会出现线程安全问题的代码(访问了共享数据的代码)
}
比较慢,AtonicInteger
注意:
1.通过代码块中的锁对象,可以使用任意的对象
2.但是必须保证多个线程使用的锁对象是同一个
3.锁对象作用:
把同步代码块锁住
原理:
2.同步方法
1.把访问共享数据的代码抽取出来,放到一个方法中
格式:
修饰符 Synchronized 返回值 方法名(){}
Synchronized (this)
静态同步方法
静态方法的锁对象是本类的class属性
3.Lock锁
Lock接口中的方法:
void lock()获取锁
void unlock()释放锁
8.线程状态
等待唤醒:线程之间的通信
Wating(无限等待)
notify(唤醒)
注意:
同步使用的锁对象必须是唯一的
只有锁对象才能调用wait和notify方法
TimeWaiting(即使等待)有两种方式:
1.使用sleep(long m)方法,在毫秒值结束之后,线程睡醒进入到Runnable/Blocked状态
2.wait(long m)自动唤醒
notifyAll()唤醒所有等待的线程
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2