创建线程有几种方式
1.通过继承Thread类实现,实现简单但不可以继承其他类,多个线程之间无法共享该线程类的实例变量。
2.实现Runnable接口,较继承Thread类,避免继承的局限性,适合资源共享。
3.使用Callable,方法中可以有返回值,并且抛出异常。
4.创建线程池实现,线程池提供了一个线程队列,队列中保存所有等待状态的线程,避免创建与销毁额外开销,提高了响应速度。
https://blog.csdn.net/longshengguoji/article/details/41126119
线程的生命周期
线程的生命周期:线程要经历新建、就绪、运行(活动)、阻塞和死亡五种不同的状态。这五种状态都可以通过Thread类中的方法进行控制。
① 新建状态 、使用new 操作符创建一个线程后,该线程仅仅是一个空对象,这时的线程处于创建状态。
② 就绪状态 、使用start()方法启动一个线程后,系统为该线程分配了除CPU外的所需资源,使该线程处于就绪状态。
③ 运行状态 、系统真正执行线程的run()方法。
④ 阻塞和唤醒线程阻塞状态 、使用sleep(),wait()方法进行操作。
⑤ 死亡状态 、线程执行了interrupt()或stop()方法,那么它也会以异常退出的方式进入死亡状态。
https://blog.csdn.net/xiaosheng900523/article/details/82964768
Runnable 和 Callable 的区别
主要区别
Runnable 接口 run 方法无返回值;Callable 接口 call 方法有返回值,支持泛型
Runnable 接口 run 方法只能抛出运行时异常,且无法捕获处理;Callable 接口 call 方法允许抛出异常,可以获取异常信息
https://blog.csdn.net/mryang125/article/details/81878168
如何启动一个新线程、调用 start 和 run 方法的区别?
线程对象调用 run 方法不开启线程。仅是对象调用方法。
线程对象调用 start 开启线程,并让 jvm 调用 run 方法在开启的线程中执行
调用 start 方法可以启动线程,并且使得线程进入就绪状态,而 run 方法只是 thread 的一个普通方法,还是在主线程中执行。
https://blog.csdn.net/woshizisezise/article/details/79938915
wait()和 sleep()的区别?
- 来自不同的类 wait():来自 Object 类; sleep():来自 Thread 类; 2.关于锁的释放: wait():在等待的过程中会释放锁; sleep():在等待的过程中不会释放锁 3.使用的范围: wait():必须在同步代码块中使用; sleep():可以在任何地方使用; 4.是否需要捕获异常 wait():不需要捕获异常; sleep():需要捕获异常;
版权归原作者 Maynor学长 所有, 如有侵权,请联系我们删除。