内容简介:java 多线程快速入门
这里将了解以下信息:
1.线程与进程
2.为什么要使用多线程?
3.多线程应用场景
4.多线程创建方式
5.线程生命周期
6.面试总结
一、线程与进程
每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。
使用线程可以把占据时间长的程序中的任务放到后台去处理,程序的运行速度可能加快,在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下可以释放一些珍贵的资源如内存占用等等。
如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换,更多的线程需要更多的内存空间,线程的中止需要考虑其对程序运行的影响。通常块模型数据是在多个线程间共享的,需要防止线程死锁情况的发生。
总结:进程是所有线程的集合,每一个线程是进程中的一条执行路径。
二、为什么要使用多线程?
比如搬运东西,如果一个人一小时只能般一块砖,那么100个人是不是在一个小时可以班100块砖?
多线程就是多个人同时进行操作!为什么用多线程,就是提高效率。节省时间!
总结:为了提高程序运行的效率!
三、多线程应用场景
看了第二点之后,这个场景大多是应用在消耗时间长的方面,读取文件,一个线程读取完毕的时间要 一个小时,那么把文件拆分,用多个线程同时读取。是不是快很多,还有发短信,插数据到数据库等操作!
总结:为了提高程序运行的效率!
四、多线程创建方式
1.继承 Thread 类
2.实现 Runnable 接口
3.使用匿名内部类创建
这里有三种创建线程的方法,到底哪一种更好呢?
总结:实现Runnable 接口的方法更好,因为java 是单一继承,不能多重继承。实现接口 还可以继承其他的方法,但是继承Thread 类,就不能继承其他类了。
五、线程的生命周期
总结:总共有五个状态:新建状态,就绪状态,运行状态,阻塞状态,死亡状态
新建状态:
就是 new 一个 如何ThreadOne 线程新建。还没调用start 之前。
就绪状态:
调用start 方法后为就绪状态
运行状态:
CPU为这个线程分配资源 运行状态
阻塞状态:
1>线程通过调用sleep方法进入睡眠状态;
2>线程调用一个在I/O上被阻塞的操作,即该操作在输入输出操作完成之前不会返回到它的调用者;
3>线程试图得到一个锁,而该锁正被其他线程持有;
4>线程在等待某个触发条件;
死亡状态:
1) run方法正常退出而自然死亡,
2) 一个未捕获的异常终止了run方法而使线程猝死。
注意阻塞状态 不是死亡状态,判断线程的 是否死亡 可以用 isAlive 方法,如果返回为True 则线程为或者,如果为false 则线程死亡。
面试题总结:
1.线程与进程的区别?
答:进程是线程的集合,每一个线程都是一个进程的执行路径。
2.创建线程有哪几种方式,用那种更好?
答:有三种,分别是 继承Thread 类,实现Runnable接口,匿名内部类创建。用事先Runnable 接口比较好,因为 java 是单一继承,不能多重继承,实现Runnable 接口,可以继承,实现其他的类。不受次限制。
3.启动线程是调用什么方法?
答:调用start 方法。
4.调用start 方法也是执行run 方法内部的代码,为什么不直接调用run 方法?
答:调用start 方法是启动线程,而调用run 方法只是 使用实例调用方法而已。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。