最近遇到一个问题,程序里的线程无论如何也不能正常退出了,可能有一个莫名其妙的线程卡住了。于是我打算重新捋一遍java Thread 最基础的知识了。

  • See also Runtime。ThreadGroup。Executor
  • java.io java.nio Stream NIO AIO
  • java.lang
  • java.util
  • all thread

线程基础知识

  • JVM 可以同时又多个Thread
  • Thread 可以设置priority
  • 高priority线程比低priotiy线程优先执行
  • 创建线程时,线程默认设置跟创建这个线程的线程相同的priority
  • 如果创建线程的线程是daemon的,那么被创建线程也是daemon的
  • 发生以下情况时jvm终止执行
    • Runtime的exit方法被调用
    • 所有的非daemon的线程都停止执行了
  • JVM启动时默认一个名为main的非daemon线程
  • 创建线程的两种方式。继承Thread 或者实现runnable

class Runtime

  • 每一个Java Application都有一个单例的Runtime
  • Application 不能手动创建Runtime对象

各个方法介绍

  • getRuntime()
获取Runtime单例对象
  • exit(int status)
退出jvm。执行shutdownhook
  • addShutdownHook(Thread hook)
当jvm关闭时需要并行执行的 线程
  • removeShutdownHook(Thread hook)
删除需要执行的线程
  • halt(int status)
立即退出
  • exec(String command)
  • exec(String command,String[] envp)
  • exec(String command,String[] envp,File dir)
  • exec(String[] cmdarray)
  • exec(String[] cmdarray, String[] envp, File dir)
执行命令
  • availableProcessors
  • freeMemory
  • totalMemory
  • maxMemory
可用进程 可用内存 使用内存 最大可用内存
  • 还有一些其他的gc,trace,load的命令