作为一个程序开发者,无时无刻都面临着多线程的问题,就像空气与你。
一、初遇线程
Thread可能是我们接触最早的多线程问题了。
以上是线程存在的6中不同的状态,当然此图只是一种流程来说明线程的不同状态
1、线程的创建
创建线程可以直接继承Thread类,也可以实现Runnable接口的形式,都是通过调用Thread的start()方法来启动
2、线程的停止
可以通过*interrupt()*方法进行停止线程,线程是否停止我们可以通过一下方法进行判断:
interrupted():查看运行此方法的(当前)线程是否已经中断,执行后具有清除标记的作用
或
isInterrupted():查看Thread的对象是否已经中断
通过尝试上面的方法,会发现interrupt之后并未终止后面代码的执行。
然后我们就需要通过抛异常、return等方式来阻止这个停不下的线程。
if(this.interrupted()){
throw new InterruptedException();
}
if(this.interrupted()){
return ;
}
暴力的终止方法:stop(),这个已经被作废。通过它停止线程可能出现,一些清理性的工作等不到处理,以及对锁定的对象进行了解锁,会造成数据不一致的问题
3、守护线程
java线程中有两种线程,一种是用户线程,另一种就是守护(Deamon /mɒnɪtə®/)线程
守护线程是一种特殊的线程,它的特性有陪伴的含义,当进程中不存在线程了,它们就会自动销毁,典型的守护线程就是垃圾回收线程。
守护线程不能持有任何需要关闭的资源,例如读取文件内容等,因为虚拟机退出时,守护线程没有任何机会来关闭文件,这会导致数据丢失
public static void main(String[] args) {
Thread t = new MyThread();
t.setDaemon(true);
t.start();
System.out.println("main方法进入睡眠...");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
}
System.out.println("睡眠结束");
}
MyThread线程你可以随便写点打印,观察一下结果
欢迎大家进行留言,想了解的或本帖不足的。同分享,同进步