JAVA语法——经典题目07

13.概括的解释下现场的几种可用状态

1.新建(new):新创建了一个线程对象。

2.可运行(runnable):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中后,获取cpu的使用权。

3.运行(running):可运行状态(runnable)的线程获得了cpu时间片(timeslice),执行程序代码。

4.阻塞(block):阻塞状态是指线程因为某种原因放弃了cpu使用权,也即让出了cup timeslice,暂时停止运行。直到线程进行可运行(runnable)状态,才有机会再次获得cpu timeslice转到运行(running)状态。阻塞的情况氛围三种:

(一)等待阻塞:运行(running)的线程执行o.wait()方法,JVM会把该线程放入等待队列(waitting queue)中。

(二)同步阻塞:运行(running)的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程占用,则JVM会把该线程放入锁池(lock pool)中。

(三)其他阻塞:运行(running)的线程执行Thread.sleep(long ms)或t.join()方法,或者发出了I/O请求时,JVM会把该线程设置为阻塞状态。当sleep()状态超时时、或者I/O处理完毕时,线程重新转入可运行(runnable)状态。

5.死亡(dead):线程run()、main()方法执行结束,或者因异常退出了run()方法,则该线程结束生命周期。死亡的线程不可再次复生。

 

14.同步方法和同步代码块的区别是什么?

区别:

同步方法默认用this或者当前类class对象作为锁;

同步代码块可以选择以什么来加锁,比同步方法要更细颗粒度,我们可以选择只同步会发生同步问题的部分代码而不是整个方法;

同步方法使用关键字synchronized修饰方法,而同步代码块主要是修饰需要进行同步的代码,用synchronized(object){代码内容}进行修饰

posted @ 2019-02-27 20:37  JAYPARK01  阅读(137)  评论(0编辑  收藏  举报