黑马程序员技术交流社区

标题: 成都黑马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