无法链接到云端(无法从云端服务器载入)
600
2022-05-29
1 进程和线程
进程:
进程是并发执行程序在执行过程中,资源分配和管理的基本单位。
进程可以理解为一个应用程序的执行过程,应用程序一旦执行,就是一个进程。
线程:
线程是进程的一个执行单元,是进程内可调度实体。
线程是比进程更小的独立运行的基本单位。
线程也被称为轻量级进程。
二者的区别:
名称
进程
线程
地址空间
不同的进程之间的地址空间是独立的
同一进程的所有线程共享本进程的地址空间
资源拥有
进程之间的资源是独立的,无法共享
同一进程的所有线程共享本进程的资源
执行过程
每一个进程可以说就是一个可执行的应用程序
线程不能够独立执行,必须依存在应用程序中
2 创建线程的五种方式
2.1 继承Thread类
通过继承Thread并且重写其run()方法,run方法中定义需要执行的任务。
创建后的子类通过调用start()方法即可执行线程方法。
注意:通过继承Thread实现的线程类,多个线程间无法共享线程类的实例变量。需要创建不同Thread对象,自然不共享资源。
2.2 实现 Runnable 接口
需要先定义一个类实现 Runnable 接口并重写该接口的 run() 方法,此run方法是线程执行体。
接着创建Runnable实现类的对象,作为创建Thread对象的参数target,此Thread对象才是真正的线程对象。
利用实现Runnable接口的线程类创建对象,可以实现线程之间的资源共享。
2.3 实现Callable 接口实现带有返回值的线程
Callable接口如同Runnable接口的升级版,其提供的call()方法将作为线程的执行体,同时允许有返回值。
Callable对象不能直接作为Thread对象的target,因为Callable接口是JAVA5新增接口,不是Runnable接口的子接口。
对于这个问题的解决方案,就引入Future接口,此接口可以接受call()的返回值,RunnableFuture接口是Future接口和Runnable接口的子接口,可以作为Thread对象的target
2.4 继承TimerTask
Timer 和 TimerTask 可以作为实现线程的另一种方式。
Timer 是一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask。
TimerTask 是一个抽象类,实现了Runnable接口,所以具备了多线程的能力。
2.5 通过线程池启动多线程
通过Executors 的工具类可以创建线程池。
提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行。
降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗。
方便线程并发数的管控,因为线程若是无限制的创建,可能会导致内存占用过多而产生OOM,并且会造成CPU过渡切换。
2.5.1 线程池一:FixThreadPool(int n)固定大小的线程池
2.5.2 线程池二:SingleThreadPoolExecutor 单线程池
单线程串行执行任务,确保任务按提交顺序执行;
当线程异常结束后,会有新的线程代替之前的线程。
2.5.3 线程池三:CachedThreadPool() 缓存线程池
线程池数量不固定,可以达到最大值。
线程可被重复利用和回收。
2.5.4 线程池四:newScheduledThreadPool()
创建一个周期性的线程池,支持定时及周期性执行任务
创建线程时,指定核心线程数,当执行任务较多超过核心线程时,可额外启动新的线程;
当任务恢复后,仅保留核心线程,其它额外线程将被关闭。
2.5.5 线程池五:newWorkStealingPool 新的线程池类 ForkJoinPool 的扩展
JDK1.8新增加
任务窃取线程池,线程有属于自己的队列,更加适用于多核心处理器。
3 Thread类和Runnable接口区别
实现Runnable接口,避免多继承局限;
实现Runnable接口,可以更好的体现资源、数据共享的概念;
Thread类也是Runnable接口的实现类。
4 线程start和run方法的区别
直接调用线程类下的run方法,并不会启动线程,只是作为普通方法来执行;
如果要启动线程来执行,必须要调用 start 方法。
5 线程的优先级
Java线程的优先级范围是1-10,默认优先级是5,10最高;
线程的优先级仍然无法保障线程的执行次序;
优先级高的线程获取CPU资源的概率较大,优先级低的也并非没机会执行;
主线程main的优先级是5。
Java 任务调度
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。