【java程序设计基础第十一章总结】多线程

  • 程序program是静态的代码,是含有指令和数据的文件,被储存在磁盘或其他的数据存储设备中。
  • 进程process是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。
  • 多任务是指一个系统中可以同时运行多个进程,即有多个独立运行的任务
  • 线程thread是处理器调度的基本单位,而进程只是资源分配的单位。一个进程包含一个以上的线程,一个进程中的线程只能使用该进程的资源和环境。线程是一个比进程更小的执行单位。同时线程也是一个动态的概念。
  • 与进程不同的是,线程不能独立存在,必须存在于进程中。
  • 同类的多个线程共享同一块内存空间和一组系统资源,所以线程切换的符合要小很多。
  • 进程和线程最大的不同就是基本上各进程是独立的,而各线程则不一定,有可能相互之间有影响。
  • 多线程就是同时执行一个以上的线程,执行一个线程不必等待另一个线程执行完,所有的线程可以发生在同一刻。
  • 多任务是针对操作系统而言,表示一个操作系统可以同时运行多个应用程序,而多线程是针对一个进程而言,表示在一个进程内部可以同时执行多个线程。
    在这里插入图片描述
  • 处于执行状态的线程在下列情况下将会让出cpu的控制权 ①线程执行完毕 ② 有比当前线程优先级更高偶读线程处于就绪状态 ③ 线程主动睡眠一段时间 ④ 线程在等待某一资源
  • 调度就是各个线程之间分配cpu资源。调度有两种模型:分时模型和抢占模型。分时模型中,线程本身不会让出cpu。 获得cpu资源的线程只能在指定的时间片内执行,一个时间片使用完毕,就必须把cpu让给另一个处于就绪状态的线程。而且在抢占模型中,当前活动线程一旦获得执行权,将一直执行下去,直到执行完成或主动放弃执行权。
  • 实现多线程的方法有两种:①继承java.lang包中的Thread类;②用户定义在自己的类中实现Runnable接口。
  • 在一个Thread的子类里激活线程,必须先做好这两件事:①该类继承自Thread类,②线程所要执行的代码必须写在run()方法内;
  • run()方法规定了线程要执行的任务,但不能直接调用run()方法,而是通过线程的start()方法来启动线程。
  • 本质上来说,任何实现线程的类都必须实现该接口。
  • Runnable接口并没有任何对线程的支持,还必须创建Thread类的实例。
  • 获取正在运行的线程的方法 ①当直接继承Thread类的子类,在类中this即指当前线程;②使用实现Runnable接口的类,要在此类中获得当前线程的引用,必须使用Thread.currentThread()方法。
    在这里插入图片描述
  • 对多线程共享的资源或数据称为临界资源或同步资源,而把每个线程中访问临界资源的那一段代码称为临界代码
  • java使用synchronized关键字来标识同步的资源。synchronized可以直译为同步,实际指的是互斥。
  • 若两个或多个线程锁定的不是同一个对象,则它们的synchronized代码块就可以互相交替穿插并发执行。
  • 所有的非synchronized代码块或方法都可以自由调用。如线程A获得了对象的互斥锁,调用对象的synchronized方法块,其他线程仍然可以自由调用该对象的所有synchronize方法和代码
  • 任何时刻,一个对象的互斥锁只能被一个线程所拥有
  • 临界代码中的共享变量应定义为private型
  • 如果synchronized用在类声明中,则表示该类中的所有方法都是synchronized的。
    在这里插入图片描述
  • 线程之间通信的方法 wait()方法,如果一个正在执行同步代码的线程A执行了wait()调用(在对象x上),则该线程暂停执行进入等待队列,并释放互斥锁。直到其他线程调用了对象x的notify()或者notiAll()方法,才能够在重新获得对象x的互斥锁继续执行。
  • 对于一个 线程,若基于对象x调用wait(),notify(),notifyAll()方法,该线程必须已经获得对象x的互斥锁,换言之,wait(),notify(),notifyAll()只能在同步代码块里调用。
  • sleep()和wait()都能使线程阻塞,但是wait()方法在放弃cpu资源的同时交出了资源的控制权,而sleep()则无法做到。
  • notify()或notifyAll()方法通知线程结束等待后,曾中断的线程就会从刚才的中断处继续执行这个同步方法;
  • 被多个线程共享的数据在同一时刻只允许一个线程处于操作中,这就是同步控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值