package seday08.thread;/*** @author xingsir * 守护线程又称为后台线程,默认创建出来的线程都是普通线程, 守护线程需要通过调用线程方法:setDaemon(boolean on)来进行设置.* 守护线程使用上与普通线程没有区别,但是在结束时机上有一个 不同之处:进程结束时,所有正在运行的守护线程都会被强制停止. * 而进程结束:当一个进程中所有的普通线程结束时进程结束* 我们也可以将某些会一致运行的任务,并且当主要业务执行完毕 后可以跟着一同结束的就都…
Java的线程是不允许启动两次的,第二次调用必然会抛出IllegalThreadStateException,这是一种运行时异常,多次调用start被认为是编程错误. 如果业务需要线程run中的代码再次执行,请重新启动一个线程实例,因此此线程的成员应当是启动前设定的而不是自动注入的.…
上篇中介绍了如何启动一个线程,通过调用start()方法才能创建并使用新线程,并且这个start()是非阻塞的,调用之后立马就返回的,实际上它是线程生命周期环节中的一种,所以这里阐述一下线程的一个完整生命周期,里面涉及的一些状态目前还未学习到,没有关系,先有个全局观,之后都会涉及到滴. 线程的生命周期: ①.new状态: 当新建一个Thread对象时,此时的状态就是new状态: 注:这时线程还没有创建. ②.runnable状态: 当执行了Thread.start()方法之后,并不代表线程立即就…
上篇随笔介绍了线程的相关基础知识以及新启线程的几种方法,本片将继续介绍线程的生命周期及方法详解. 一.线程的生命周期 在Thread代码中,线程的状态被分为6种 public enum State { /** * 尚未启动的线程处于此状态 */ NEW, /** * 在java虚拟机中执行或等待其他资源的线程处于此状态 */ RUNNABLE, /** * 被阻塞等待监视器锁定的线程处于此状态*/ BLOCKED, /** * 正在等待另一个线程执行特定动作的线程处于此状态*/ WAITING,…
这篇博客介绍线程的生命周期. 线程是一个动态执行的过程,它也有从创建到死亡的过程. 线程的几种状态 在 Thread 类中,有一个枚举内部类: 上面的信息以图片表示如下: 第一张图: 第二张图:把等待.计时等待.阻塞看成阻塞一个状态了 1.新建状态(new):使用 new 创建一个线程,仅仅只是在堆中分配了内存空间 新建状态下,线程还没有调用 start()方法启动,只是存在一个线程对象而已 Thread t = new Thread();//这就是t线程的新建状态 2.可运行状态(runnab…
结果: 线程首先会运行一次,然后抛出java.lang.IllegalThreadStateException异常. 根据控制台的异常信息,定位到Thread.java的第708行,也就start()方法内部,打个断点调试: 调试发现,第一个次运行start()方法时,threadStatus是0,此时if条件不满足,继续执行,会将当前线程添加到线程组中去执行. 第二次运行start()方法时,threadStatus变成了2,if条件满足,于是抛出了java.lang.IllegalThrea…
简介 使用线程的主要原因:应用程序中一些操作需要消耗一定的时间,比如对文件.数据库.网络的访问等等,而我们不希望用户一直等待到操作结束,而是在此同时可以进行一些其他的操作.  这就可以使用线程来实现.  本文主要介绍关于Thread和ThreadPool的基础知识. Thread类 基本用法 使用Thread类可以创建和控制线程,在下面的示例代码中,Thread类的构造函数重载为接受ThreadStart和ParameterizedThreadStart类型的委托参数.ThreadStart委托…
回到这个问题,可以用源码的角度去回答,这样会让面试官对有更好的印象 ------>如果直接调用run方法的话,所执行的线程是main线程.调用start方法的话,会新建一个子线程,去执行run方法里面的内容. (这里的话,可以从源码的角度去看,当调用start方法的时候,会调用底层的start0的native方法,通过openjdk去查看的话,我们可以看到它是调用了JVM_ThreadStart的c语音方法,而ThreadStart方法里面调用了 thread_Entry的方法,而这个方法是会创…
简介 使用线程的主要原因:应用程序中一些操作需要消耗一定的时间,比如对文件.数据库.网络的访问等等,而我们不希望用户一直等待到操作结束,而是在此同时可以进行一些其他的操作.  这就可以使用线程来实现.  本文主要介绍关于Thread和ThreadPool的基础知识. Thread类 基本用法 使用Thread类可以创建和控制线程,在下面的示例代码中,Thread类的构造函数重载为接受ThreadStart和ParameterizedThreadStart类型的委托参数.ThreadStart委托…
1) start方法: 用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码.通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止. 2) run(): run()方法只是类的一个普通方法而已,如果直接调用run方法,程序中依然只有主线程这一个线…