第十一章。并发

进程是指运行中的应用程序,每一个进程都有自己的独立内存空间,线程是指进程中能够独立执行的控制流。
线程的创建主要有两种方法,一个是继承[color=red]Thread类[/color],重写run方法;另一个是继承[color=red]Runnable接口[/color],实现run接口。实现Runnable接口的对象代表的是一个计算任务,这个任务可以交由其他线程(如线程池的线程)来执行。因此,Runnable对应要完成的任务,Thread对应任务的执行者。
线程的生命周期中有四种状态:[color=red]新建、就绪、阻塞、死亡[/color]。其中就绪状态是调用了start()方法后的状态,在这个状态中的任意时刻线程可以运行也可以不运行,只要调度器把时间片分配给线程,线程就可以运行,java不区分就绪和运行状态。
线程的同步方法有几种,其中比较常用的是[color=red]synchronized[/color]关键字和[color=red]同步锁lock[/color]的实现类,synchronized是自动获取锁和释放锁的,lock是手动。对于一些线程不安全的类,有些是有线程安全的实现的,例如容器类和基本类型都有,这些会在以后《java 并发编程实践》中详细说到的。
线程的调度方法也有几种:[color=red]sleep()[/color]方法,线程在一定的时间内进入阻塞状态,期间由监视器来监视,到时间会唤醒线程,此方法不区分优先级,不会释放锁;[color=red]yield()[/color]方法,不确保一定进入阻塞状态,有可能调用了这个方法后这个线程还在运行。另外它只会给优先级等于或者大于自身的线程有机会获取运行机会。[color=red]wait()方法和notify、notifyAll方法[/color]一起用在同步方法中,也只有在同步方法中才有效。调用wait方法的线程会释放锁,并进入等待队列,notify方法会随机唤醒一个在等待队列中的线程,notifyAll方法会唤醒所有等待队列中的线程。 也可以设置线程的优先级,[color=red]优先级有1~10级[/color],有3个静态常量表示1、5、10级,主线程和由主线程创建的线程默认是5级。最后,一个线程可以在其他线程上调用join()方法,则当前运行的线程将被挂起,直到目标线程运行结束,它才恢复运行。
线程也分为[color=red]守护线程(后台线程,如垃圾收集)和非守护线程[/color],主线程和由主线程创建的线程默认是非守护线程,当所有非守护线程运行结束,不管守护线程是否都结束都要退出程序。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值