javaSE_day16_线程

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

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

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

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

线程的生命周期

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_线程)