大数据编程入门Java多线程编程
当执行一些耗时操作比如发起网络请求或者读取数据库时,常常会使用多线程编程,那么什么是多线程编程呢?今天小编为大家带来的是大数据编程入门:Java多线程编程。
一、Java多线程概念
Java为多线程编程提供了内置支持。线程是指进程中的单个顺序控制流。一个进程中可以有多个线程并发,每个线程并行执行不同的任务。
多线程是多任务处理的一种特殊形式,但多线程使用较少的资源开销。
这里定义了另一个与线程相关的术语-进程:进程包括操作系统分配的内存空间,并包含一个或多个线程。线程不能独立存在,这必须是一个过程的一部分。进程将一直运行,直到所有非守护进程线程都完成运行。
多线程可以满足程序员编写高效的程序并充分利用CPU。二、一个线程的生命周期
线程是一个动态执行过程,和自然界的生物一样,它也有一个从产生到死亡的过程。
以下将展示一个线程完整的生命周期图:
① 新建状态:
使用new关键字和Thread类或其子类创建线程对象后,则该线程对象处于新状态。它将保持此状态,直到程序start()线程。
② 就绪状态:
当线程对象调用start()方法时,线程进入就绪状态。处于就绪状态的线程位于就绪队列中,需要等待JVM中线程调度器的调度。
③ 运行状态:
如果就绪线程获得CPU资源,它可以执行run(),并且线程正在运行。处于运行状态的线程是最复杂的,可能会被阻塞、就绪和失效。
④ 阻塞状态:
如果线程执行sleep、suspend和其他方法并丢失其占用的资源,则该线程将从运行状态进入阻塞状态。睡眠时间到期或设备资源已获得后,可以重新进入就绪状态,可分为三种类型:
A. 等待阻塞:处于运行状态的线程执行wait()方法,使线程进入等待阻塞状态。
B. 同步阻塞:线程无法获取同步同步锁(因为同步锁被其他线程占用)。
C. 其他阻塞:当通过调用线程的sleep()或join()发出I/O请求时,线程将进入阻塞状态。当sleep()状态超时时,join()等待线程终止或超时,或者I/O处理完成,线程返回就绪状态。
⑤ 死亡状态:
当正在运行的线程完成任务或出现其他终止条件时,该线程将切换到终止状态。三、线程的的优先级
每个java线程都有一个优先级,这有助于操作系统确定线程的调度顺序。
java线程的优先级是一个值范围为1(Thread.MIN_PRIORITY )-10(Thread.MAX_PRIORITY )默认情况下,每个线程都被分配一个优先级NORM_PRIORITY(5)。
优先级越高的线程对程序越重要,处理器资源应该在优先级较低的线程之前分配。然而,线程优先级并不能保证线程的执行顺序,它非常依赖于平台。四、创建一个线程
在Java中 提供了三种创建线程的方法:
① 通过实现 Runnable 接口;
② 通过继承 Thread 类本身;
③ 通过 Callable 和 Future 创建线程。五、通过实现Runnable接口来创建线程
创建线程的最简单方法是创建一个实现Runnable接口的类。
类只需要执行一个方法调用run()就可以实现Runnable,声明如下:
public void run()
可以重写此方法,重要的是要理解run()可以调用其他方法、使用其他类和声明变量,就像主线程一样。
在Runnable接口的类实现后,可以在类中实例化一个线程对象。
下面是Thread定义的一种常用的构造方法:
Thread(Runnable threadOb,String threadName);
上面的threadOb是实现Runnable接口的类的实例,threadName指定新线程的名称。
创建新线程后,在它运行之前调用它的start()方法。
void start();
以下是一个创建并执行的线程实例:
运行结果:
六、通过继承Thread来创建线程
创建线程的第二种方法是创建继承Thread类的新类,然后创建该类的实例。
继承的类必须重写run()方法,该方法是新线程的入口点。它还必须调用start()方法来执行。
尽管此方法被列为多线程实现,但它本质上是Runnable接口的一个实例。
运行结果:
七、Thread方法
1、下面是Thread类的一些重要方法的列表:
方法
描述
public void start()
使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
public void run()
如果线程是使用独立的Runnable运行对象构造的,则调用Runnable对象的run方法;否则,该方法不执行任何操作并返回。
public final void setName(String name)
改变线程名称,使之与参数 name 相同。
public final void setPriority(int priority)
更改线程的优先级。
public final void setDaemon(boolean on)
将该线程标记为守护线程或用户线程。
public final void join(long millisec)
等待该线程终止的时间最长为 millis 毫秒。
public void interrupt()
中断线程。
public final boolean isAlive()
测试线程是否处于活动状态。
2、测试线程是否处于活动状态,Thread对象调用上述方法。以下方法是Thread类的静态方法。
方法
描述
public static void yield()
暂停当前正在执行的线程对象,并执行其他线程。
public static void sleep(long millisec)
将当前执行的线程休眠(暂停)指定的毫秒数,这受系统计时器和计划程序的准确性和准确性的影响。
public static boolean holdsLock(Object x)
当且仅当当前线程在指定的对象上保持监视器锁时,才返回 true。
public static Thread currentThread()
返回对当前正在执行的线程对象的引用。
public static void dumpStack()
将当前线程的堆栈跟踪打印至标准错误流。
3、实例
下面的ThreadClassDemo 程序演示了Thread类的一些方法:
运行结果:
八、通过 Callable 和 Future 创建线程
1、创建Callable接口的实现类并实现call()方法,该方法将用作线程执行器并具有返回值。
2、创建Callable实现类的实例,并使用FutureTask类包装Callable对象。FutureTask对象封装了Callable对象的call()方法的返回值。
3、使用FutureTask对象作为Thread对象的target,创建并启动新线程。
4、调用FutureTask对象的get()方法,获取子线程执行后的返回值。
实例:
九、创建线程的三种方式的对比
1、当通过实现Runnable和Callable接口创建多个线程时,线程类只实现Runnable接口或Callable接口,还可以继承其他类。
2、通过继承Thread类创建多线程时,易于编写,如果需要访问当前线程,则不需要使用Thread.currentThread() 方法,您可以直接使用this来获取当前线程。十、线程的几个主要概念
在使用多线程编程时,需要了解下面的这几个概念:
① 线程同步
② 线程间通信
③ 线程死锁
④ 线程控制:挂起、停止和恢复十一、多线程的使用
有效利用多线程的关键是理解程序是并发执行的,而不是串行执行的。例如,程序中有两个子系统需要同时执行。此时,需要多线程编程。
通过使用多线程,我们可以编写一个非常高效的程序。但是,请注意,如果创建太多线程,程序执行的效率实际上会降低,而不是提高。
记住,上下文切换开销也很重要,果创建的线程太多,CPU将花费比执行程序更多的时间进行上下文切换!
以上就是关于大数据编程入门:Java多线程编程的全部内容了,希望这篇文章可以帮助到大家~
复星医药与英矽智能宣布,达成1300万美元首付款的AI制药合作雷峰网消息,近日,上海复星医药与英矽智能达成合作协议,在全球范围内共同推进多个靶点的AI药物研发。这项战略合作包括针对四个指定靶点的以人工智能驱动的药物研发合作,以及双方对于英矽智
一加10Pro智能手机获TUV南德36个月流畅度A等级认证深圳2022年1月11日美通社近日,国际独立第三方检测检验和认证机构TUV南德意志集团(以下简称TUV南德)为深圳市万普拉斯科技有限公司(以下简称一加,英文缩写OnePlus)旗舰
如何挑选超高性价比的路由器1。先说现在怎么选择路由器,现在百兆宽带已经普及,那么路由器选择至少需要满足两个标准,A千兆端口B支持2。4G和5G频段。从型号上来说,温饱级别是AC1200,其中AC代表wifi
云狐J5一加10Pro参数报价对比云狐J5手机机型云狐J5一加10Pro最新价格4580元4999元屏幕尺寸4。5英寸6。7英寸屏幕类型柔性AMOLED分辨率128072032161440像素525ppi屏幕技术1
从泰康模式看保险电商的突围之路泰康人寿的保险电商模式是,借助交易频繁高粘性高流量的互联网平台来加大产品的销售力度,同时完善自身平台的交易结构,通过客户需求把握产品搭配组合和自身网站交易流程的优化来提高用户体验。
苹果2021年总共向开发者支付600亿美元品玩1月11日讯,据新浪科技消息,苹果周一表示,2021年总共向开发者支付了600亿美元,自2008年苹果应用商店AppStore推出以来总共支付了2600亿美元,这表明AppSt
国际艺术市场新风口?NFT推动数字艺术热潮警惕骗局也不少西班牙先锋报网站近日报道称,基于区块链技术的NFT(非同质化代币)推动了艺术市场的发展。在一年以前,这种营销艺术品的方式还鲜为人知,但现在正逐渐普及。1992年的第1条短信不久前在
推广数字人民币的一大难题央行从2014年就开始研究数字人民币。它被称为eCNY,旨在取代已经在流通的现金和硬币。它是由央行统一管理发行的,不同于比特币等加密货币(不受任何央行的管辖)。迄今为止,央行已经通
5390万!vivo正式打败苹果,国产手机三板斧果然有效在全球手机市场,苹果公司一直是一个特立独行的存在,它自己一家公司就攫取了手机市场70以上的利润,而三星华为小米等其他上百家手机公司瓜分剩下的30。根据知名调研机构Bloomberg
证券之星APP四川长虹(600839)01月11日在投资者关系平台上答复了投资者关心的问题。投资者董秘你好,建议宿舍不要新装电视机等多媒体产品了,优先选用按摩椅。另外公司只有美菱在开布局老式按摩
美媒元宇宙人才争夺升温,微软AR团队流失近百员工多人转投Meta华尔街日报1月11日消息,据微软前雇员和网上的工作履历透露出的信息,随着各公司对于拥有构建元宇宙技能的人才争夺升温,微软的增强现实(AR)团队在过去一年里流失约100名员工,其中许