多线程知识

Posted by BY 大雁小鱼 on June 15, 2018

多线程知识

基本概念

  • 线程是操作系统调度的基本单位,进程是操作系统分配资源的基本单位
  • 在同一个进程下的多个线程共享这个进程的资源,不同进程的资源是不能共享的
  • Java中只存在线程,它映射到操作系统中的轻量级进程,即线程

JAVA中是不存在进程的,因为Java虚拟机启动本身就是作为一个进程存在的,进程里面是不能再创建进程的。 Linux从内核2.6开始使用NPTL支持,此时的线程本质上是轻量级进程(LWP) Java里的线程是由JVM来管理的,它如何对应到OS的线程是由JVM的实现确定的。Linux2.6上的HotSpot使用NPTL机制,JVM线程跟内核轻量级进程有着一一对应的关系。

这种实现方式有一个缺点,如果程序上使用内核线程的话,必然需要在用户态和内核态来回切换,这个太耗性能了。

线程状态

synchronized关键字

Java中的每个对象都有一个监视器,在非多线程环境下不起作用,在synchronized范围中,监视器将发挥作用。
wait/notify/notifyAll必须存在于synchronized块中,且这3个关键字针对同一个监视器。

当某代码并不持有监视器时去wait或者notify,会抛出java.lang.IllegalMonitorStateException,另外如果在synchronized块中去调用另一个 对象的wait/notify,因为不同对象的监视器不同,同样会抛出异常。

参考网址

  • https://www.cnblogs.com/wxd0108/p/5479442.html