java面试题-多线程篇十三

什么是线程?

  线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的时机运作单位.程序员可以通过他进行多处理器编程,你可以使用多线程对运算密集型任务进行提速.比如,如果一个线程完成一个任务要100毫秒,那么用10个线程完成该任务只需10毫秒.

线程和进程的区别?

  线程是进程的子集,一个进程可以有很多线程,每条线程并执行不同的任务,不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间,每个线程都拥有单独的栈内存用来存储本地数据.

如何在java中实现线程?

  有两种方式:java.long.Thread类的实例就是一个线程但是它需要调用的Runnable接口来执行,由于线程类本身就是调用的Runnable接口,所以你可以调用java.long.Thread类或者直接调用Runnable接口来重写run()方法实现线程.

  继承Thread类:

  步骤:1.继承Thread 类2.覆盖run方法,把要运行的代码存储在run方法体中3.调用thread类的start的方法开启线程,在调用run方法

  实现Runnable

  步骤:1.实现Runnable 接口2.覆盖Runnable接口的run方法,将线程要运行的代码存储到run方法当中3.将实现Runnable接口的子类对象作为实际参数传递到Thread类的构造函数中.因为线程对象创建后必须要明确要允许的run方法,而Runnable方法所属的对象是Runnable方法所属的对象是Runnable接口的子类对象.4.调用thread类的start方法.

两种实现多线程的比较?

  1.实现Runnable接口避免了单继承的局限性

  2.把线程运行的代码单独的封装到Runnable接口类型的对象中,这样实现了线程对象和任务对象的解耦.

wait和sleep的区别?

  1.sleep指定时间,wait可以指定时间,也可以不指定时间.

  2.wait 方法必须定义在同步中,sleep方法不一定

  3.在同步中wait和sleep对于执行权和锁的处理不同:

    Sleep 释放CPU执行权,但是没有释放锁

    Wait释放执行权,释放锁

线程池的作用?

  第一:降低资源消耗.通过重复利用已创建的线程简单线程创建和销毁造成的消耗

  第二:提高响应速度,当任务到达时,任务可以不需要等到线程创建就能立即执行

  第三:提高线程的可管理性,线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控

为什么使用线程池?

  线程池的作用就是限制系统中执行线程的数量.

根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果,少了浪费了系统资源,多了造成系统拥挤效率不高,用线程池控制线程数量,其他线程排队等候,一个任务只需完毕,再从队列中取最前面的任务开始执行,若队列中没有等待进程,线程池的这一资源处于等待,当一个新任务需要运行时,如果线程池中有等待的工作线程,就可以开始运行了;否则进入等待队列.

线程的5种状态?

  1.被创建:即不具备资格也不具备执行权.

  2.运行:在此时只有一个线程在运行,线程具备了执行资格也具备了执行权.

  3.冻结;此时线程放弃了执行资格和执行权.

  4.消亡:释放路径.

  5.临时阻塞;具备执行资格,但是没有执行权,等待CPU切换到它执行.

 

 

  

posted @ 2017-12-20 15:25  友情天  阅读(130)  评论(0编辑  收藏  举报