您的当前位置:首页正文

java面试每日三题(4)线程

来源:华佗健康网


一、线程相关API

对于线程相关的api也是大家需要熟练掌握的。

1,wait线程等待

        调用该方法的线程进入WAITING状态,只有等待另外线程的通知或者被中断才会返回,需要注意的是调用wait方法后,会释放对象的锁,因此,wait方法一般用在同步方法或者同步代码块中。

2,sleep线程睡眠

        sleep导致当前线程休眠,与wai方法不同的是sleep不会释放当前占有的锁,sleep会导致线程进入TIMED-WATING状态。

3,yield线程让步

        yield会使当前线程让出cpu执行时间片,与其他线程一起重新竞争cpu时间片,一般情况下,优先级高的线程有更大的可能性成功竞争得到cpu时间片,但是不是绝对的,有的操作系统本身就对线程优先级不敏感。

4,interrupt线程中断

        中断一个线程,就是给这个线程一个通知,会影响这个线程内部的一个中断标识位。这个线程本身并不会因此改变状态。

5,join等待其他线程终止

        在当前线程中调用join方法则当前线程转变为阻塞状态,回到另一个线程结束,当前线程再有阻塞状态变为就绪状态,等待cpu调度。

6,notify线程唤醒

        唤醒在此对象监视器上等待的单个线程,如果所有线程都在此对象上等待,则随机唤醒其中一个线程。


二、wait和sleep的区别

wait在等待的过程中会释放锁,wait必须在同步代码块中使用,不需要捕获异常。

sleep在等待过程中不会释放锁,可以在任何地方使用,需要捕获异常。

三、了解线程池

在实际使用中,线程是很占用系统资源的,如果对线程管理不完善的话很容易发生系统问题,使用线程池可以重复利用已有的线程执行任务,可以对线程进行管理和编排。

 创建线程的方法分为自动创建和手动创建,自动创建则是通过Executors类名直接调用api创建。手动创建使用new ThreadPoolExecutor,手动创建的优点是可以灵活的设置线程池的参数。


因篇幅问题不能全部显示,请点此查看更多更全内容