进程: 内存中 正在运行的一个应用程序。
线程: 进程中的一个执行流程。
多线程:有两个 或 两个以上 并发的执行流程。
---------------------------------------
线程的生命周期:
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的执行权,也放弃了锁。