多线程

进程:应用程序。出于运行过程中的程序,并且具有一定的独立功能,,是系统资源分配和调度的最小单元。

线程:一个或多个。

并行:在同一时刻,有多条指令在多个处理器上同时执行。

并发:在同一时间间隔,多个进程指令被快速轮换执行。

          抢占式多任务操作策略

一、创建线程启动

       1、继承thread类创建线程类

             定义thread类的子类,并重写该类的run()方法,该run()方法的方法体 线程执行体。

       2、实现runable接口创建线程类

       3、匿名内部类

二、线程生命周期

       1、新建状态

              用new关键字和thread类极其子类建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间。通过调用start方法进入就绪状态。

        注意:不能对已经启动的线程再次调用start方法。

       2、就绪状态

              出于就绪状态的线程已经具备了运行条件,但还没有分配到CPU,出于线程就绪队列。一旦获得CPU,线程就进入运行状态,并自动调用自己的run方法。

       3、运行状态

              可以变成阻塞状态、就绪状态、死亡状态。

       4、阻塞状态

              出于运行状态的线程在某些情况下,如执行了(sleep)方法,或等待I/O设备等资源,将让出CPU并暂时停止自己的运行,进入阻塞状态。

       5、死亡状态

               当线程的run方法执行完,或者被强制性的终止,就认为它死去。这个线程对象也许是活的,但是,它已经不是一个单独执行的线程。线程一旦死去,就不会复生。如果在一个死去的线程上调用start()方法,会抛出异常。

三、线程管理

 

        1、线程睡眠(sleep)

             线程暂停,并进入阻塞状态,通过调用thread类的静态sleep()方法来实现

        2、线程让步(yield)

             yield()和sleep()方法比较相似,它也thread类提供的一个静态的方法。它也可以让当前正在执行的线程停止,让出CPU资源给其他线程。

        3、线程合并(join)

                 thread提供了让一个线程等待另一个线程完成的方法––join()方法。

        4、设置线程优先级

                MAX_PRIORITY、MIN_PRIORITY、NORM_PRIORITY三个静态常量来设定优先级。

        5、后台(守护、精灵)线程

               为其他线程提供服务

                如果所有的前台线程都死亡,后台线程会自动死亡

        6、正常结束线程

 

四、线程同步

        1、同步代码块

              Synchronized  互斥访问

                     格式:synchronized(同步锁){

                                      需要同步操作的代码

                              }

        2、同步方法

                   同步锁:对于非static方法,同步锁就是this

                                对于static方法,我们使用当前方法所在类的字节码对象(类名.class)            

        3、锁机制=lock(同步锁)

               public void lock():加同步锁

               public void unlock():释放同步锁

五、线程通信

        1、等待唤醒机制:wait  notify  notifyAll

        2、

        3、

六、线程池

          顶级接口:java.util.concurrent.Executor

           创建线程池:public static ExecutorService newFixedThreadPool(int nThreads)

          步骤:⑴、创建线程池对象

                    ⑵、创建runable接口子类对象(tack task)

                    ⑶、提交runable接口子类对象

                    ⑷、关闭线程池(一般不做)

七、死锁

           死锁的四个条件:

            1、互斥条件。资源不能被共享,只能被同一个进程使用。

            2、请求与保持条件。已经得到资源的进程可以申请新的资源。

            3、非剥夺条件。已经分配的资源不能从相应的进程中被强制剥夺。

           4、循环等待条件。

八、线程相关类

posted @ 2019-09-27 20:51  半世晨光  阅读(135)  评论(0编辑  收藏  举报