Linux从内核2.6开始使用NPTL(Native POSIX Thread Library)支持,但这时线程本质上还轻量级进程。 Native POSIX Thread Library(NPTL)是Linux内核中实践POSIX Threads标准的库。POSIX线程(英语:POSIX Threads,常被缩写为Pthreads)是POSIX的线程标准,定义了创建和 *** 纵线程的一套API。实现POSIX 线程标准的库常被称作Pthreads
Pthreads定义了一套C语言的类型、函数与常量,它以pthread.h头文件和一个线程库实现。
Pthreads API中大致共有100个函数调用,全都以"pthread_"开头,并可以分为四类:
线程管理,例如创建线程,等待(join)线程,查询线程状态等。
互斥锁(Mutex):创建、摧毁、锁定、解锁、设置属性等 *** 作
条件变量(Condition Variable):创建、摧毁、等待、通知、设置与查询属性等 *** 作
使用了互斥锁的线程间的同步管理
Java里的线程是由JVM来管理的,它如何对应到 *** 作系统的线程是由JVM的实现来确定的。Linux 2.6上的HotSpot使用了NPTL机制, JVM线程跟内核轻量级进程有一一对应的关系 。线程的调度完全交给了 *** 作系统内核,当然jvm还保留一些策略足以影响到其内部的线程调度,举个例子,在linux下,只要一个Thread.run就会调用一个fork产生一个线程。
Java线程在Windows及Linux平台上的实现方式,现在看来,是内核线程的实现方式。这种方式实现的线程,是直接由 *** 作系统内核支持的——由内核完成线程切换,内核通过 *** 纵调度器(Thread Scheduler)实现线程调度,并将线程任务反映到各个处理器上。内核线程是内核的一个分身。程序一般不直接使用该内核线程,而是使用其高级接口,即轻量级进程
创建用户级线程
不显式设置-Xss或-XX:ThreadStackSize时,在Linux x64上ThreadStackSize的默认值就是1024KB,给Java线程创建栈会用这个参数指定的大小。这是前一块代码的意思。如果把-Xss或者-XX:ThreadStackSize设为0,就是使用“系统默认值”。而在Linux x64上HotSpot VM给Java栈定义的“系统默认”大小也是1MB。
所以这个条件下普通Java线程的默认栈大小怎样都是1MB。
在LINUX上可以使用kill-3
pid
>
thread.info来取得当前JVM线程的信息
jstack
这个是用来查看jvm当前的thread
dump的。可以看到当前Jvm里面的线程状况。
这个对于查找blocked线程比较有意义
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)