1. Runnable 方式可以避免Thread 方式由于java 但继承特性带来的缺陷。
2. Runnable 的代码可以被多个线程共享,适合多个线程处理统一资源的情况。
3.线程的生命周期:
创建 ---------- 》 就绪 ----------------》 运行 -------------》 终止
^|------------阻塞-----------|^
阻塞 ; 由于某种原因而暂停时让出了CPU资源,暂停了自己的执行,便进入了阻塞的状态。如调用了sleep() 方法
4. jstack :
作用; 生成JVM 当前时刻线程的快照,即当前的线程的所有线程信息。
目的: 帮助定位程序问题出现的原因,如长时间停顿,CPU占用过高等。
package cn.lanz.trns;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Scanner;
class DaemonThread implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("进入守护线程: "+Thread.currentThread().getName());
try {
writeToFile();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("退出守护线程:"+Thread.currentThread().getName());
}
private void writeToFile() throws Exception {
// TODO Auto-generated method stub
File fileName=new File("e:"+File.separator+"deamo.txt");
OutputStream os=new FileOutputStream(fileName,true);
int count=0;
while(count<999){
os.write(("\r\nword"+count).getBytes());
System.out.println("守护线程: "+Thread.currentThread().getName()+"向文件中写入了word"+count++);
Thread.sleep(1000);
}
}
}
public class DemoThrea {
/**
* @version 创建时间: 2016-12-27:下午4:55:01
* @author 作者: 蓝世彬
* @描述: @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("进入主线程:"+Thread.currentThread().getName());
DaemonThread daemonThread=new DaemonThread();
Thread t=new Thread(daemonThread);
t.setDaemon(true);
t.start();
Scanner sc=new Scanner(System.in);
sc.next();
System.out.println("退出主线程:"+Thread.currentThread().getName());
}
}