java线程的创建与执行_Java多线程的创建和运行

1.多线程的好处

多线程是一个很有用的东西,它使的系统可以同时运行多个任务,提高程序的执行效率。大家平时可能没有注意到,其实我们电脑能同时执行多个程序的基本原理就是多线程。

每一个程序都是一个进程,而线程则是进程下独立的执行单元。

如果把一台电脑当成一个工业园区,那么这个电脑能容纳的工厂越多,说明这个电脑越好,而进程就是对于电脑而言,就犹如工厂对于工业园区而言。而工厂中的每一条流水线就是工厂的进程,他们都是独立的,但是在关系的可以互相依赖,或者互相排斥等等,但是最重要的一点,他们是可以独立运行的。因此工厂都是多线程模式,我要生产一台电脑,不会先造外壳,然后造硬盘,内存等等一个个造完再去组装吧。

我们是分成多条流水线,造外壳的专门造外壳,造硬盘的造硬盘,造内存的造内存,最后去组装流水线组装。用第一种方法,就是一条龙做下来所消耗的时间和多条流水线同时运行。假设一下我们生产电脑每个步骤所需人力和时间为1和n秒。现在有m个步骤才能完成一台电脑。那么一条龙式所需的人力为m,所需时间为nm。如果是多线程,现在有m条流水线,所需人力为m,所需时间为n。这不难看出,只要电脑性能足够(所谓人力),多线程所消耗时间将比一条龙式做法少很多很多。再硬件性能已经不再是最大限制的时候,多线程将是最适合的现代发展。

还有一点,多线程对处理高并发是最合适的。如果我们的面对服务器都是一对一服务,那么对硬件而言是一种浪费,如果过多的同时接入用户,又会对系统而言不能做到很好的执行,因为他是一条龙式的,但是如果我们现在不是一条龙,而是流水线。就像银行柜台,只有一个窗口,那么这个窗口要处理转账,取钱,存款等事情的时候就会变慢。但是如果三个窗口分别处理就会变快,这就是所谓的多线程的优势。

2.Java多线程的创建

Java多线程创建目前而言有三种方式:新建继承Thread类,新建实现Runnable类,匿名类三种。但其实都是基于Runnable接口完成,因为Thread也是实现了Runnable接口。所以可以说如果掌握了Runnable接口,那么基本就掌握了多线程的创建。

1.创建线程方式1:继承Thread类

创建一个类继承thread,重写run方法:将线程任务相关的代码写在该方法中。

创建子类对象,调用start方法开启线程。

2.创建线程方式2:实现runnable接口

创建一个类实现Runnable接口,重写run方法:将线程任务相关的代码写在该方法中

创建Runnable接口实现类对象,根据实现类对象创建Thread对象

调用线程对象的start方法开启线程:在新的路径中执行实现类对象的run方法

3.创建线程的方式3:匿名内部类

匿名内部类的语法

new类名或者接口名(){

//有方法重写就重写

}

这个办法是最常用的,虽然只有一次性,但是我们会经常使用。因为有的时候线程我们开启一次就够了,如果需要多个线程的话,一般会直接使用线程池不需要我们直接手动开启了。但是如果说我们只是短时间内使用,直接使用匿名表达式就可以了。(补充一下:不一定会使用匿名表达式,因为以一种接口叫函数式接口,就是接口里面只有且只能有一个抽象方法。这种情况下我们可以使用lambda表达式,用起来跟加简单。当然还有方法引用这种方法但是其实都是差不多的。)

4.总结

重点其实在于run方法,所有的线程开启终归依赖于run方法。就像我们运行java代码的时候,入口只能是main方法一样,运行多线程唯一入口也只能是run方法。

所以所有要执行的代码都要写在run方法中。

但是!!!

启动线程的方法是start方法

记住这两个最重要的方法,一个写代码,一个启动线程。上面三种创建线程的方法都依靠这两种方法执行线程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/438822.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL SERVER data tier application 的作用及如何使用SSDT进行SQL数据库的自动化部署到生产环境和版本控制

这个是管理员用来发布数据库所有的脚本用的,自SQL2008以后,微软开始将数据库的开发整合到VS2010上,用户可以将数据所有的相关对象打包成一个DAC包,让管理通过extract data-tier application发布到服务器上。就好像你把代码变成dll…

bitcount java_Java.math.BigInteger.bitCount()方法实例

全屏Java.math.BigInteger.bitCount()方法实例java.math.BigInteger.bitCount()返回此BigInteger的二进制补码表示的位,从它的符号位不同的数字。实现位向量样式集上BigIntegers的时候,此方法很有用。声明以下是java.math.BigInteger.bitCount()方法的声…

java character是什么意思_Java Character 类

利用Character提取字符串中的大写字母和小写字母:public class UpperLowerCase {/** 利用Character类提取字符串中的大写字母和小写字母* auther Anthony-Z*/public static void main(String[] args) {String sr1 "I Like JAVA ! I learn Java everyday."…

php 和jsp,jsp和php哪个好?jsp和php的简单比较

jsp和php这两个Web开发技术哪个好?这个问题应该会有很多人问,但是每种开发技术都有各自的优缺点,所谓的哪个好,不过是看你更擅长使用哪一种技术,所以今天我们来对比一下jsp和php,介绍jsp和php之间有什么区别…

jQuery Ajax 如何设置Timeout

$.get()与$.post()方法是$.ajax的高级封装 全局属性 $.ajaxSetup({timeout:5000}); $.ajax方法有timeout属性可设置,单位也是毫秒。 Azure App Service MVC下,全局属性才起作用,不知为何

php调用sql数据库代码怎么写,PHP读取SQL文件并导入数据库(示例)

/*** 读取 sql 文件并写入数据库* version 1.01 demo.php* author xingshaocheng* edit: www.jbxue.com*/class DBManager{var $dbHost ;var $dbUser ;var $dbPassword ;var $dbSchema ;function __construct($host,$user,$password,$schema){$this->dbHost $host;$thi…

如何修改SharePoint服务器场管理员帐户和密码

最近需要修改MOSS服务器场的管理员帐户,用 "%commonprogramfiles%\Microsoft Shared\Web server extensions\12\BIN\Stsadm.exe" -o updatefarmcredentials -userlogin [username] -password [password] 这条命令去修改发现没有修改成功,这个…

php中sisson用法,thinkPHP中session()方法用法详解

本文实例讲述了thinkPHP中session()方法用法。分享给大家供大家参考,具体如下:系统提供了Session管理和操作的完善支持,全部操作可以通过一个内置的session函数完成。用法session(name,name,value)参数name(必须):如果传入数组 则…

【转】SharePoint 2010 Search Service -- 管理中心配置

今天配置了一下SharePoint Search,怕忘,赶紧记下来。 我参考了国外的一篇文章:Search Configuration in SharePoint 2010 首先,要查看以下User Profile Service, User Profile Synchronization Service是否运行正常,然…

PHP获取表单数据的方法有几种,如何实现PHP获取表单数据与HTML嵌入PHP脚本

如何实现PHP获取表单数据与HTML嵌入PHP脚本导语:如何实现PHP获取表单数据与HTML嵌入PHP脚本,下面是小编给大家提供的操作讲解,大家可以参考阅读,更多详情请关注应届毕业生考试网。常用的自动全局变量如下所示:1、GET方…

【转】SharePoint 2013中修改windows 活动目录(AD)域用户密码的WebPart(免费下载)

前段时间工作很忙,好久没更新博客了,趁国庆休假期间,整理了两个之前积累很实用的企业集成组件,并在真正的大型项目中经受住了考验:.Net版SAP RFC适配器组件和SharePoint 2013修改AD域用户密码的WebPart。目前无法在网上…

php base64尺寸,PHP base64编码的图像显示不正确

我试图使用base64编码将图像(任何大小)发送到我创建的API。编码后的字符串会作为URL中的参数访问我的API。使用PHP构建的API。PHP base64编码的图像显示不正确一旦请求命中我的API,我想将图像存储到我的服务器上,并将文件名保存在数据库中。这是工作&…

软件测试之-测试用例写作规范

通用测试用例写作规范 软件测试用例得出软件测试用例的内容,其次,按照软件测试写作方法,落实到文档中,两者是形式和内容的关系,好的测试用例不仅方便自己和别人查看,而且能帮助设计的时候考虑的更周。 一…

php后静态绑定,详解PHP后期静态绑定分析与应用

基础知识1. 范围解析操作符 (::)可以用于访问静态成员,类常量,还可以用于覆盖类中的属性和方法。self,parent 和 static 这三个特殊的关键字是用于在类定义的内部对其属性或方法进行访问的。parent用于调用父类中被覆盖的属性或方法(出现在哪…

Windows电脑SMB共享设置方法

SMB简介: SMB(Server Message Block)(*nix平台和Win NT4.0又称CIFS)协议是Windows平台标准文件共享协议,Linux平台通过samba来支持。SMB最新版本v3.0,在v2.0基础上针对WAN和分布式有改进。 建议使用原版wind…

php个人扫码支付,PHP个人发卡网源码,支持MA支付对接,扫码自动发货

PHP个人发卡网源码,支持MA支付对接,扫码自动发货。源码介绍个人发卡网源码,支持码支付对接,扫码自动发货.自适应网页,可为商品设置优惠套餐,后台管理功能丰富。前台发卡页面有点粗糙,已开源的可…

NtLmSsp

NTLMSSP (NT LAN Manager Security Support Provider),是微软提供的安全支持接口协议,常用于SMB共享。估计你是从linux的fstab配置文件看来的选项吧。这个是参数指定了linux挂载smb网络共享时使用的加密方法。 NtLmSsp(NT LM安全性支持提供者…

php让代码重新运行一次,脚本运行时是否可以动态重新加载PHP代码?

我有一个使用PHPSockets的多人游戏服务器,因此完全用PHP编写.目前,每当我对PHP服务器脚本进行任何更改时,我都必须终止该脚本,然后重新开始.这意味着任何在线用户都会断开连接(通常不会出现问题,因为目前没有这么多用户).现在我正在重写服务器脚本以使用自定义PHP类并对其进行一…

php网页表格样式,HTML5制作表格样式

废话不多说了,具体代码如下所示:表格*{margin: 0;padding: 0;}body{font: italic 20px Georgia, serif;letter-spacing: normal;background-color: #f0f0f0;}#content{width: 750px;padding: 40px;margin: 0 auto;background-color: #fff;border-left: 3…

SharePoint 开发TimerJob 介绍

项目需要写TimerJob,以前也大概知道原理,不过,开发过程中,还是遇到一些问题,网上看了好多博客,也有写的灰常好的,不过,自己还是想再写一下,也算是给自己一个总结&#xf…