java 第二十五节、二十六节课

进程和线程都是一个控制流程
一个进程对应一个程序,一个程序可以由多个不同的线程组成。
线程分为单线程:效率低,没有充分利用cpu。
多线程:共享内存,实现多任务。
进程为一个数据结构及功能在其进行一次操作。两个基本特征:可用于资源的独立单位;一个可以独立调度和分派的基本单位。
一个进程可以拥有多个线程,一个线程必须有一个父类进程。线程不拥有系统资源,只拥有运行必须的一些数据结构。
Java中的Main是一个单线程。
创建多线程的方法:Thread类(继承)、Runnable接口(实现)。
每个线程都是通过某个特定的Thread对象所对应的方法。
run()来完成操作,称为线程体。使用start()方法,进入Runnable可运行状态。
不一定马上会执行,而是进入Runnable,不要直接调用run()方法。
new新建状态:创建一个线程对象后,该线程对象就处于新建状态
runnable就绪状态:当线程对象调用了start()方法后,该线程就进入就绪状态。
Running运行状态:如果处于就绪状态的线程获得cpu使用权,开始执行run()方法中线程执行体,则线程处于运行状态。
Blocked阻塞状态:当线程调用一个阻塞时的IO方法时,该线程就会进入阻塞状态,如果想进入就绪状态就必须要等到这个阻塞的IO方法返回。
当线程试图获取某个对象的同锁时,如果该锁被其他线程所持有,则当前线程会阻塞状态,如果想从阻塞状态进入就绪状态必须其他线所持有锁。
当线程调用了Thread和sleep(long&nbspmillis)方法时,也会使线程进入阻塞状态,在这情况只需等到线程睡眠时间到了以后,线程就会自动进入就绪状态。
当线程调用某个对象的wait()方法时,也会使线程进入阻塞状态,如果想进入就绪状态就需要使用notify() 方法唤醒该线程。
当在一个线程中调用了另一个线程的join()方法时,会使用当前线程进入阻塞状态,**在这种情况下,需等到新加入 的线程结束后阻塞状态,进入就绪状态。

Terminated(死亡状态):线程的run()方法正常执行完毕或者线程抛出一个未捕捉的异常(Exception)、错误(Error),线程就进入死亡状态。
继承Thread只能继承一次,不能扩展。Runnable中没有start。只能通过Thread。
单线程中,main()方法必须等到run方法返回才能继续执行。
资源互相争夺。一般可以通过控制run方法中的循环条件来控制线程的终止。
继承Thread只能继承一次,不能扩展。Runnable中没有start。只能通过Thread。
几乎所有的多线程应用都实现Runnable这种方式。
阻塞——调用sleep放弃占用资源——调用阻塞Io方法——等待同步锁——等待通知(notify、notifyall) —— 调用suspend挂起线程。
解除阻塞——sleep时间结束——阻塞式IO方式返回——获得同步频——获得一个通知——resume
wait()进入等待状态
notify()唤醒其他线程
interrupt中断线程(被动)
yield()主动放弃执行
get\set sppriority()获得\设置线程优先级
sleep()线程睡眠指定时间
join()调用这个方法的主线程强制加入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值