创建线程方法1、 class mythread extends Thread{ 重写run方法 } mythread m=new mythread () 启动:m.start() 创建线程方法2、 class mythread implements Runnable{ 重写run方法 } mythread m=new mythread () Thread t=new Thread(m)//Thread t=new Thread(m,“xx线程name”) t.start() 这种方式 Runnable的代码可被多个线程共享,适用于多个线程处理同一资源,原因如下 Thread t=new Thread(m,“xx线程name”) Thread t=new Thread(m,“xx线程name1”) 阻塞状态: sleep()方法可进入阻塞,时间结束进入就绪状态 守护线程: 线程对象.setDaemon(true)必须在start()方法之前调用 在守护线程中产生的新线程也是守护线程 不是所有任务都可以分配给守护线程,比如读写操作、计算逻辑 其他线程结束执行后,守护线程会立即结束 用jstack生成线程快照,来查看哪些是守护线程在jdk下的bin目录里 jstack -l pid(如9400) 含有daemon的是守护线程 tid、nid:cpu占有率