java基础之多线程一:概述

概述: 进程有多条执行路径, 合成为: 多线程.
    进程和线程的描述:
        进程:     
            可执行程序(文件), 例如: .exe//可以把进程理解为一辆车.
            一台电脑上可以有多个进程, 这些进程之间的数据是相互隔离的.//例如: qq.exe,  wechat.exe
        线程: 
            线程是进程的执行路径(执行单元)//可以把线程理解为: 是马路
            一个进程可以有多条线程, 这些线程可以共享该进程的数据.//例如: 往QQ群共享放一个文件, 该群中的所有的用户都可以下载.    
        进程依托于系统,线程依托于CPU
        
多线程并行和并发的区别:
    并行: 两个(多个)线程同时执行.     //前提: 需要多核CPU
    
    并发: 
        两个(多个)线程同时请求执行, 但是CPU同一瞬间只能执行一个线程,
        于是就安排这些线程交替执行, 因为时间间隔非常短, 我们看起来好像是同时执行的, 其实不是.
        
多线程的实现方式: 链接
    方式一: 继承Thread类.
        步骤:
            1) 定义一个类(MyThread), 继承Thread类.
            2) 重写Thread#run(). //重写Thread类中的run()方法.
            3) 把要执行的代码放入run()方法中.
            4) 在测试类中,创建线程对象.
            5) 开启线程.  //start()
            
            好处: 代码相对比较简单.        //因为是继承Thread类, 所以可以直接使用Thread类中的非私有成员.
            弊端: 扩展性相对较差.        //因为是继承, 而Java中类之间的继承只能单继承, 不能多继承, 但是可以多层继承.
            
            注意事项:
                A: 如果调用run()方法, 只是普通的方法调用.
                B: 开启线程必须调用start()方法, 该方法会自动去调用run()方法.            
                C: 同一线程不能重复开启, 否则会报: IllegalThreadStateException异常.
    
    方式二: 实现Runnable接口.
        步骤:
            1) 定义一个类(MyRunnable), 实现Runnable接口.
            2) 重写Runnable#run().
            3) 把要执行的代码放入run()方法中.
            4) 在测试类中, 创建Runnable接口的子类对象, 
                MyRunnable mr = new MyRunnable();
               并将其作为参数传入Thread类的构造, 创建线程对象.
                Thread th = new Thread(mr);
            5) 开启线程.    //start()
            
            好处: 扩展性相对较强.
            弊端: 代码相对比较 繁琐.
    
    方式三: 结合线程池使用(实现Callable接口).

Thread类中的成员:
    构造方法:
        public Thread();
        public Thread(String name);
        public Thread(Runnable target);
        public Thread(Runnable target,String name);
        
    
    成员方法:
        run();              //里边定义的是线程要执行的代码, 该方法会自动被start()方法调用.
        start();            //开启线程, 会自动调用run().
        getName();
        setName();
        sleep();            //休眠线程, 单位是: 毫秒.
        currentThread();    //获取当前正在执行的线程对象(的引用).
        
    
多线程同步:
    概述/作用:
        多线程(环境) 并发 操作同一数据, 有可能引发安全问题, 就需要用到同步解决.
    
    分类:
        同步代码块:
            格式:
                synchronized(锁对象) {
                    //要加锁的代码
                }
            锁对象:
                1) 同步代码块的锁对象可以是任意类型的对象.
                2) 必须使用同一把锁, 否则可能出现锁不住的情况.
        
        同步方法:
            静态方法:
                锁对象: 该类的字节码文件对象.
            非静态方法:
                锁对象: this
                
多线程的生命周期
    新建, 就绪, 运行(有可能会发生阻塞或者等待状态), 死亡.

猜你喜欢

转载自www.cnblogs.com/Alex-zqzy/p/9152645.html
今日推荐