美文网首页
javaSE_day16_线程

javaSE_day16_线程

作者: 智慧之门 | 来源:发表于2018-06-04 10:32 被阅读0次

    进程: 内存中 正在运行的一个应用程序。

    线程: 进程中的一个执行流程。

    多线程:有两个 或 两个以上 并发的执行流程。

    ---------------------------------------

    线程的生命周期

    1.新建: new Thread();

    2.就绪: start();

    3.运行:run(){}

    4.阻塞:暂停执行

      1)sleep,join阻塞

            sleep:等待 多少毫秒 ;超时了之后 恢复 就绪状态等待CPU调用执行。

             join:等待其它线程执行完。

                线程A 调用了线程B的join()方法, 那么线程A等待 线程B执行完后,再执行。

        2)同步

        3) wait

    5.死亡

    ----------------------------------

    主线程:任务 main()

    问题 :启动一个java应用程序至少启动几个?

      主线程, 垃圾回收线程

    -------------------------------------

    子线程

    名 : Thread-数字

    创建子线程

          方式:

            1.继承 Thread类

            2.实现接口 Runnable接口

        区别:

          1.继承Thread类 ,继承了Thread类的所有可以继承的方法;Runnable接口 ,只有 run();

          2.Runnable接口 有利于资源共享。

    -----------------------------------

    优先级:1  -  10;10最高

    // zhangsan.setPriority(Thread.MAX_PRIORITY);

    // zhangsan.setPriority(Thread.MIN_PRIORITY);

    zhangsan.setPriority(Thread.NORM_PRIORITY);

    ------------------------------------------

    线程中断引发:InterruptedException 异常:

    前提 :当前线程 处于 sleep 或 join时,被其它 线程中断了 iterrupt()了,那么 当前线程 会进行

          异常处理。例如:主线程 调用了子线程 t1的 iterrupt方法 ,子线程 t1被中断 进入异常处理。

    ------------------------------------------

    yield线程让步(了解)

    理论上:当线程A 调用了 yield方法,那么 会 让给线程优先级 比它 高的线程 或 优先级和它平等的线程执行。

    ------------------------------------------------

    同步

    某一时刻 此资源 只能被一个线程独占。

    语法

        1.同步块:锁定 对象

        2.同步方法:锁对象this

    获得锁

          当一个线程 访问此对象的 同步块 或 同步方法的时候,申请同步锁,申请成功了,就获得了锁。在执行 同步块和 同步方法的过程中,其它线程 进入 线程锁定池中处于 阻塞状态。只有 当前执行锁的线程 释放了锁 其它线程才有 机会 获得CPU的调用执行。

    释放锁

          1.同步方法或同步块中的 代码正常执行完了,就释放了;

          2.  出现了未处理的 异常Exception和 Error时 ,释放锁;

          3   break,return语句,会结束方法或代码块,那么会释放锁。

          4. 执行了 wait()会释放锁。

    ------------------------------

    Lock 作用:

          1.lock可以显示的加锁 和 释放锁;

          2.提供了更多的功能。

    -------------------------------------

    sleep(): 一定要指定参数; 放弃了CPU的执行权,但是没有放弃锁。

    wait():可以指定参数,也可以不指定;放弃了CPU的执行权,也放弃了锁。

    相关文章

      网友评论

          本文标题:javaSE_day16_线程

          本文链接:https://www.haomeiwen.com/subject/iurddftx.html