`
duofeng512
  • 浏览: 7654 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

第十一章。并发

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

相关推荐

Global site tag (gtag.js) - Google Analytics