在大数据开发学习当中,Java基础是非常重要的一部分,打好了Java基础,才能在后续的大数据框架技术学习阶段,也能有所主力。而Java当中的一个重要知识点,就是多线程。今天的大数据基础分享,我们就主要来讲讲Java多线程入门基础。
一、线程与多线程
关于线程,官方定义是操作系统能够进行运算调度的最小单位,线程包含在进程之中,是进程中的实际运作单位。而多线程,致力于解决多任务同时执行的需求,合理使用CPU资源。
多线程的运行是根据CPU切换完成,如何切换由CPU决定。在实际运行当中,一个进程中可以并发多个线程,每条线程并行执行不同的任务。不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。
二、为什么要使用多线程
更快的响应时间
多个线程并行执行不同的任务,使得单位时间内能够完成的任务更多,也能更快地完成大批量的任务。
更多的处理器核心
线程是大多数操作系统调度的基本单元,一个程序作为一个进程来运行,程序运行过程中能够创建多个线程,而一个线程在一个时刻只能运行在一个处理器核心上。
更好的编程模型
java为多线程编程提供了考究并且一致的编程模型,使开发人员能够更加专注于问题解决,即为所遇到的问题建立适合的模型,而不是绞尽脑汁地考虑如何将其多线程化。一旦开发人员建立好了模型,稍作修改总是能够方便地映射到Java提供的多线程编程模型上。
三、多线程如何实现
1.创建线程
在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。在使用Runnable接口时需要建立一个Thread实例。因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例。Thread构造函数:
public Thread();
public Thread(Runnable target);
public Thread(String name);
public Thread(Runnable target,String name);
public Thread(ThreadGroup group,Runnable target);
public Thread(ThreadGroup group,String name);
public Thread(ThreadGroup group,Runnable target,String name);
public Thread(ThreadGroup group,Runnable target,String name,long stackSize);
2.线程的生命周期
与人有生老病死一样,线程也同样要经历开始(等待)、运行、挂起和停止四种不同的状态。这四种状态都可以通过Thread类中的方法进行控制。下面给出了Thread类中和这四种状态相关的方法。
//开始线程
publicvoid start();
publicvoid run();
//挂起和唤醒线程
publicvoid resume();//不建议使用
publicvoid suspend();//不建议使用
publicstaticvoid sleep(long millis);
publicstaticvoid sleep(long millis,int nanos);
//终止线程
publicvoid stop();//不建议使用
publicvoid interrupt();
//得到线程状态
publicboolean isAlive();
publicboolean isInterrupted();
publicstaticboolean interrupted();
//join方法
publicvoid join()throws InterruptedException;
线程在建立后并不马上执行run方法中的代码,而是处于等待状态。线程处于等待状态时,可以通过Thread类的方法来设置线程不各种属性,如线程的优先级(setPriority)、线程名(setName)和线程的类型(setDaemon)等。
当调用start方法后,线程开始执行run方法中的代码。线程进入运行状态。可以通过Thread类的isAlive方法来判断线程是否处于运行状态。当线程处于运行状态时,isAlive返回true,当isAlive返回false时,可能线程处于等待状态,也可能处于停止状态。
一但线程开始执行run方法,就会一直到这个run方法执行完成这个线程才退出。但在线程执行的过程中,可以通过两个方法使线程暂时停止执行。这两个方法是suspend和sleep。在使用suspend挂起线程后,可以通过resume方法唤醒线程。而使用sleep使线程休眠后,只能在设定的时间后使线程处于就绪状态。
有三种方法可以使终止线程。
①使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。
②使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,也可能发生不可预料的结果)。
③使用interrupt方法中断线程。
关于大数据基础,Java多线程入门,以上就为大家做了简单的介绍了。在Java基础学习阶段,多线程的概念是需要去理解透彻的,同时,多线程知识点在面试当中也是出现频率非常高的问题,值得重视。