11.5(day21) 进程 线程 多线程 线程安全问题 单例模式 死锁 线程生命周期

进程:

   正在进行中的程序

线程:

   可独立运行的代码的片段

   所属于进程

多线程:

   一个进程中有多个可独立运行的代码片段

一个进程中至少有一个进程

如果有一个线程的程序,称之为单线程程序

 

java语言支持多线程

 

所有的程序执行都在内存中开辟空间,依赖CPU执行,我们看的是CPU同时执行这些应用程序,其实CPU某一时刻只能执行一个程序,CPU坐着高速的切换动作

 

创建线程:

    1.继承java.lang.Thread类

      1.定义类继承Thread类

      2.重写run方法(run即是子线程所要运行的代码)

      3.在主线程中创建子线程,并启动子线程

      弊端:

         由于java是单继承,如果类已经继承了其他类,不能再去继承线程类

         即是当前类没有继承其他类,是否继承线程,也是要考虑继承体系结构,不能去改变结构

    2.实现java.lang.Runnable接口

      1.定义类实现Runnable接口

      2.在类中实现run方法

      3.创建线程对象,thread对象

      4.将实现类对象,作为参考传递给thread对象的构造方法

      5.调用start方法启动线程

获取当前线程对象:

    Thread.currentThread() 该方法写到哪里获取的就是所在的线程的对象

获取线程名称:

    getName()

设置线程名:

    setName(name)

线程优先级:

    1-10

    默认级别:5

    getPriority():获取优先级

    setPriority(number):设置优先级

 

线程安全问题:

    原因:

       多个线程操作同一个资源时,对该资源操作的代码不止一行时,一个线程没有执行完关于该资源的执行代码,另一个线程参与进来执行

    解决办法:

       一个线程执行时,另一个线程不能参与执行

       同步代码块:

          synchronized(锁对象){

          }

          对象可以为任意对象

       前提:

          1.大于等于两个以上的线程

          2.保证多线程使用的是同一个锁对象

       好处:

          解决了多线程安全问题

       弊端:

          效率降低了  

单例模式:

    保证对象的唯一性

    1.将构造方法私有化

    2.创建本类的对象

    3.创建方法,返回本类对象

    两种写法:

        饿汉式:多线程访问时没有安全问题

        懒汉式:多线程访问时有安全问题,不能保证对象的唯一,需要加入同步解决问题

死锁:

    实际开发中不能出现死锁

    程序卡在某一个地方,不能继续向下执行,这种现象--死锁

锁对象:

    synchronized可以用来修饰方法,修饰的方法具备了同步的特性

      1.实例同步方法:this

      2.静态同步方法:类名.class

线程生命周期:

    新建状态:new Thread(),new Thread(new Runnable(){})

    可运行状态:调用start(),有执行资格,等到CPU调度

    正在运行状态:CPU调度该线程

    终止状态:run方法结束

    堵塞状态:正在运行进入到该状态,主动放弃执行资格,CPU不在调度

          startc sleep(时间):让线程睡一会,时间到了自然醒---可运行状态

          wait():让线程等待   notify():唤醒处于等待状态的线程---可运行状态

          join():加入线程

当多线程中某一个线程发生了异常,这个线程停止运行并返回异常信息,其他线程继续运行不会停止,即对其他线程没有影响  

posted on 2018-11-05 14:00  /a_a/  阅读(202)  评论(0编辑  收藏  举报

导航