我们都知道,在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口。
  1.进程和线程的区别是什么?
  进程是执行着的应用程序,而线程是进程内部的一个执行序列。一个进程可以有多个线程。线程又叫做轻量级进程。
  2.创建线程有几种不同的方式?你喜欢哪一种?为什么?
有三种方式可以用来创建线程:
     (1)继承Thread类
     (2)实现Runnable接口
     (3)应用程序可以使用Executor框架来创建线程池
实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类。在应用设计中已经继承了别的对象的情况下,这需要多继承(而Java不支持多继承),只能实现接口。同时,线程池也是非常高效的,很容易实现和使用。
  3.概括的解释下线程的几种可用状态。
线程在执行过程中,可以处于下面几种状态:
     就绪(Runnable):线程准备运行,不一定立马就能开始执行。
     运行中(Running):进程正在执行线程的代码。
     等待中(Waiting):线程处于阻塞的状态,等待外部的处理结束。
     睡眠中(Sleeping):线程被强制睡眠。
     I/O阻塞(Blocked on I/O):等待I/O操作完成。
     同步阻塞(Blocked on Synchronization):等待获取锁。
     死亡(Dead):线程完成了执行。
  4.同步方法和同步代码块的区别是什么?
  在Java语言中,每一个对象有一把锁。线程可以使用synchronized关键字来获取对象上的锁。synchronized关键字可应用在方法级别(粗粒度锁)或者是代码块级别(细粒度锁)。
  5.在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步?
  监视器和锁在Java虚拟机中是一块使用的。监视器监视一块同步代码块,确保一次只有一个线程执行同步代码块。每一个监视器都和一个对象引用相关联。线程在获取锁之前不允许执行同步代码。
  6.什么是死锁(deadlock)?
  两个进程都在等待对方执行完毕才能继续往下执行的时候就发生了死锁。结果就是两个进程都陷入了无限的等待中。
  7.如何确保N个线程可以访问N个资源同时又不导致死锁?
  使用多线程的时候,一种非常简单的避免死锁的方式就是:指定获取锁的顺序,并强制线程按照指定的顺序获取锁。因此,如果所有的线程都是以同样的顺序加锁和释放锁,就不会出现死锁了。

最新文章

  1. xamarin DependencyService源码阅读
  2. Web服务
  3. Day7-面向对象
  4. ios 开发之单例模式
  5. mac攻略(七) -- 环境变量PATH分析
  6. Visro 应用的前端模板工具介绍 -JsRender
  7. 安装Ubuntu之后
  8. getPos封装
  9. 标准库 - fmt/print.go 解读
  10. linux mount命令学习
  11. 【百度地图API1.1】修改文本标注的样式
  12. 漫谈QML
  13. Chrome中java因过期而遭到阻止
  14. webservice 项目中遇到的问题
  15. mybatis的xml处理大于和小于号问题
  16. CentOS 7.2 下nginx SSL证书部署的方法(使用crt以及key 配置)
  17. MySQL(十四)管理维护及性能优化
  18. uoj【UNR #3】To Do Tree 【贪心】
  19. 网络流Ek算法
  20. zabbix系列之监控类型及方式

热门文章

  1. git 的简单使用(4)
  2. Boa服务器编译移植
  3. HTML5本地存储——Web SQL Database与indexedDB
  4. mysql 数据的某个范围数据
  5. noip模拟赛 Massacre at Béziers
  6. 清北学堂模拟赛d6t4 数组异或
  7. springcloud(十一):服务网关Zuul高级篇
  8. N天学习一个linux命令之xargs
  9. mongodb之存储引擎
  10. 网络基础篇(一)--TCP/IP协议族