谈谈java线程

来源:互联网 发布:淘宝退差价是几天之内 编辑:程序博客网 时间:2024/05/22 09:38

              我们都知道在Windows下一个JVM对应一个进程,一个进程有多个线程,感觉很多人对线程还是有很多迷惑,在这里在详谈下java中的线程。

             首先是线程的分类,线程可以分为守护线程和非守护线程,通俗的说守护线程就是系统自带的运行的线程,非守护线程就是我们自定义的线程,在main方法启动的时候就会启动一个非守护线程,在这里也想到一个问题,怎么判断JVM是否存活?其实就是看他的非守护线程是否存活,那么如何判断非守护线程是否存活呢,我们可以一层一层的去找他的父线程,这样就会找到是否还有线程存活。

             接下来说一下如何创建一个线程,第一种方法是继承java.lang.Thread类,第二种方法是实现java.lang.Runnable接口,在说说线程本身还有什么东西,线程在JVM里,有个指向特殊地址的指针,就是指向下一个需要执行方法的地址,还有操作数栈。其实线程就是调用方法的,每调用一个方法,需要一个线程去执行,这个方法需要一个操作数栈才能运行方法,所以线程在执行方法的时候要有个栈空间,虚拟机要为这个栈分配一块空间,这也是为什么我们NEW很多线程的时候,速度性能会下降,它会为这个方法分配空间,具体怎么分配空间呢,就是看这个方法里面有多少个参数,多少个变量,去分配多少空间,线程就会在里面执行,通过JVM的指令执行,通过操作数栈来计算,计算的接口就会返回(如果这个方法有返回值,这个变量的属性就会赋给它)。

             最后在说下多个线程的问题,处理多个线程的时候NEW会很慢,可以用线程池来解决,但是线程池也有个问题,如果线程池里有50个线程,但是我生产的是100个,这就要引用系统的拆分,用异步的形式拆分,可以用MQ解决异步。

             大概就是这些,还有关于线程安全问题在上篇博文中已经谈过了,如有异议,欢迎指正!


0 0
原创粉丝点击