我对Java线程的运用比少,在JavaEE对框架进行开发很少用到多线程,在Android开发中稍微运用多一些,但只是最简单的创建线程,调用run方法。 这几天在慕课网观看视频细说多线程之Thread VS Runnable重新系统学习Java线程知识,对其进行归纳总结,以下是知识笔记:
class MyThread extends Thread{
@Override
public void run(){
}
}
MyThread t = new MyThread();//创建线程
t.start();//启动线程
class MyThread implements Runnable{
@Override
public void run(){
}
}
MyThread mt = new MyThread();
Thread t = new Thread(mt);//创建线程
t.start();//启动线程
实现Runnable接口方式可以避免Thread方式是单继承特性带来的缺陷。同时Runnable方法的代码可以被多个线程共享,适用于多个线程共享同一资源的情况。
一张图解释
用户线程
运行在前台,执行具体任务(程序主线程、连接网络线程等)
守护线程
运行在后台,为其他前台线程服务。(数据库连接池检测线程、垃圾回收线程)
特点:一旦所有用户线程结束,守护线程也随JVM一起结束工作。
设置守护线程:调用Thread类的setDaemon(true)方法。
注意:setDaemon(true)必须在start()方法之前调用,否则抛出IllegalThreadStateException异常
可用jstack生成线程快照,查看是否是守护线程
jstack.exe在jdk的bin目录下