×

run run是什么意思 是什么意思

网络run是什么意思?篮球中continuity什么意思像是run motion, run continuity, p

admin admin 发表于2022-09-04 19:43:42 浏览162 评论0

抢沙发发表评论

本文目录

网络run是什么意思


意思:跑;行驶;运转;运营;持续;蔓延;传播;竞选;遭遇;熔化;褪色;流。

run。

读音:英 [rʌn];美 [rʌn]。

一、run还可用作系动词,意思是“用”“达到”“变得”,常接形容词作表语。用于比赛时可接序数词,表示“跑第几名”。

二、run的现在进行时可表示按计划或安排、打算将要发生的动作,此时句中一般有表明将来的时间状语或特定的上下文。

近义词:escape。

读音:英 [ɪ’skeɪp];美 [ɪ’skeɪp]。

意思:

v. 逃跑;逃脱;逃避;被忘掉;泄露;去度假。

n. 逃跑;逃脱;逃避;泄露;度假;[计算机]退出键。

一、escape可用作及物动词或不及物动词。用作及物动词时,跟名词、代词、动名词作宾语,不能跟动词不定式。

二、escape用作不及物动词时,后接from(英)〔outof(美)〕,意思是“从,逃出”。


篮球中continuity什么意思像是run motion, run continuity, p


continuity是快速的,run motion指的是在球场上跑动,run continuity,快速的跑动,patterns or quick hitters阵地战或者快速反击。

loadrunner如何使用


1、使用LoadRunner 完成测试一般分为四个步骤:
2、Vvitrual User Generator 创建脚本
创建脚本,选择协议
录制脚本
编辑脚本
检查修改脚本是否有误
3、中央控制器(Controller)来调度虚拟用户
创建Scenario,选择脚本
设置机器虚拟用户数
设置Schedule
如果模拟多机测试,设置Ip Spoofer
4、运行脚本
分析scenario
分析测试结果
5、安装LoadRunner 中文版
LoadRunner 分为Windows 版本和Unix 版本。如果我们的所有测试环境基于Windows
平台, 那么我们只要安装Windows 版本即可。本章讲解的安装过程就是LoadRunner7.8中文的Windows 版本的安装。
6、使用LoadRunner进行负载/压力测试
7、录制基本的用户脚本
创建用户脚本需要用到VuGen。提示: 运行VuGen 最好在1024*768 的分辨率下, 否则有些工具栏会看不到。
启动Visual User Generator 后, 通过菜单新建一个用户脚本, 选择系统通讯的协议。
这里我们需要测试的是Web 应用,同时考虑到后台SQL数据库所以我们需要选择Web(HTTP/HTML)协议+SQL SERVER协议,确定后, 进入主窗体。通过菜单来启动录制脚本的命令。
8、在URL 中添入要测试的Web 站点地址..。
●测试
-run

和run有关的词组


  • “run”的短语搭配:

1、in the long run:最终,长期地,从长远来看。

2、run out:被用完,被耗尽,用完,花光,到期,期满。

3、run away:突然离开,逃离,逃避,避免正视。

4、run into:偶遇,碰到,陷入。

5、run out of:耗尽,用完。

  • “run”的例句:

1、Lack of fitness told against him on his first run of the season.

身体欠佳影响了他在赛季中的第一次赛跑。

2、The plastic reel allows the line to run free as it spools out.

塑料轴能让线自由放出。

3、About 1,500 runners are expected to sweat it out in this year’s run.

预计大约会有1500名赛跑者将在今年的比赛中艰苦拼搏。


LoadRunner学习知多少


一. 什么是LoadRunner
LoadRunner是一种预测系统行为和性能的工业标准级负载测试工具。通过以模拟多个用户实施并发负载测试及实时性能检测的方式来确认和查找问题,能对整个企业架构进行测试。
二. LoadRunner的优点
1. 轻松创建虚拟用户:通过记录下业务流程转为测试脚本,在机器上产生多个用户访问,减少负载测试需要的硬件和人力资源。
2. 创建真实的负载:可以通过Controller设定负载方案,如定义用户在什么时候访问系统以产生负载,所有用户同时执行一个动作来模拟峰值负载情况等。
3. 实时监测器:可以实时显示交易性能数据(如响应时间)和其他系统组件如数据库,网络等的实时性能。
4. 分析结果以精确定位问题所在:LoadRunner能收集汇总所有测试数据,提供高级的分析和报告工具。
三. LoadRunner的安装与使用
1.安装过程详见上传的LoadRunner使用手册,在此不再详细介绍。
2.具体使用:

点击File新建录制文件,也可以点击下面的NEW快捷键进行新建。使用File新建,会弹出协议选择窗口,选择新的单协议脚本(New SingleProtocol Script)的Web(HTTP/HTML)项,确定即可(选择Web项是因为我们测试的是Web应用)。接着会弹出开始录制的设置项,需要写入录入系统的地址,点击确定后就会根据录入地址展现系统页面,开始录制脚本,出现小工具条:

第一个按钮为录制键
第二个为回放脚本键
第三个为停止录制键
第四个为暂停录制键
第五个为编译脚本键
第六个为创建新的Action键。LR的录制脚本分为三个部分,vuser_init、vuser_end和 Action。脚本循环执行时,只执行一次vuser_init和vuser_end,而多次循环Action部分。比如录制投保业务时,登陆系统部分放入vuser_init,退出登陆放到vuser_end,中间的投保操作放到Action中,则循环执行时就会登陆一次投保系统开始反复执行投保操作直到结束退出系统。
第七个为用来改变录制的options设置按钮
第八个和第九个为插入事务的起始点和结束点键,结合起来构成一个完整事物,用来衡量服务器的性能。比如录制脚本过程中,投保系统的查询投保单号操作,可以在输入完查询信息后点击查询按钮前插入事务的起始点,查询出数据后插入事务的结束点,这样在运行测试脚本时,Loadrunner在运行到该事务时,便会计算出这个查询操作所花时间,便于衡量服务器执行查询操作的性能。
第十个为插入集合点键,可用于衡量在加重负载的情况下服务器的性能。比如要验证系统是否能承受100人同时进行报案操作,便可在脚本录入过程中,点击报案确认键操作前插入集合点,这样当脚本运行到集合点时,Loadrunner会让100个虚拟用户同时点击报案确认按钮(如果有的用户还没运行到集合点,先到用户要等未到用户一起操作)进行报案,从而达到测试目的。
最后一个为设置验证点键,在创建事物后,设置一个验证点可以用来确认事物执行是否成功。比如进行查询事务操作时,LR只要检测到网页的响应,就认为事务pass,而不管显示页面内容是否正确。因此为了检查Web服务器返回的网页是否正确,可以插入Text/Image检查点,验证网页上是否存在指定的Text或Image。
设置验证点时,如果我们验证的文本内容是中文,有时会返回无法找到验证内容的报错信息,而页面显示又是正确的,出现问题的原因可能是因为LR对中文的支持部好,尽量选择验证信息为数字或字母;也可能是设置问题,可以尝试将Tools-》Recording Options-》HTTP Properties下的Advanced选项里设置支持UTF-8,再检查开发人员有没有设置支持中文。
录制结束后,先点击保存脚本,同时为脚本命名。然后编译脚本,看是否存在语法错误,编译成功后,即可回放,看录制脚本是否成功。
LoadRunner录制得到的脚本基本没有错误,不像robot会有录入数据的缺失,只是会录入一些非录入系统的网页信息,根据地址可以识别并删除掉。
四. LoadRunner脚本录制学习小结
1. LoadRunner录制脚本,主要是为了进行压力测试,所以跑流程时,跑了主要流程即可,也就是系统必须的信息录入就可以了。
2. LoadRunner的脚本运行过程中,只能用于一次业务办理的数据需要做参数化,如车辆车架号,车牌,报案号等,以免出现重复投保或报案无法立案现象,不能继续进行下去。参数化步骤:
1) 将需要做参数化的数据右键点击,选择Replace with a parameter,进行设置。
2) 在弹出编辑框里,设置易懂的参数名称,再点击Properties进行属性设置。
3) 点击Create Table 按钮,生成参数表格,再点击Edit with Notepad按钮,即可在记事本里添加新的参数,添加完后再次回车(不回车可能最后条数据读取不到)关闭,参数化操作完成。
4) 使用Ctrl +H键可以找到替换同样的需要参数化的数据。
3. 脚本跑流程过程中,因为业务运转,前面生成的投保单要接着进行提交核保业务,而每次生成的投保单号不一样,用于进行提交核保的单号也要与之前的保持一致,因此需要做关联处理,读取到生成的新投保单号给提交核保流程。关联步骤:
1) .查找关联数据第一次出现的位置,判断该数据是由什么函数返回的。
2) .在树形结构里点击返回该数据值的函数,看它的Server Response信息,用复制的关联数据进行查找它的返回语句,找到区分度明显的语句(不一定要是第一个返回语句),然后使用web_reg_save_param函数进行关联。
注:关联函数一定要写在第一个返回该数据值的函数前。
3) .web_reg_save_param (const char *ParamName, 《List ofAttributes》, LAST);
函数的第一个参数是用来对关联数据进行定义的,取名最好可读性强;第二个参数是用来标识关联数据在返回语句里的具体位置的,写出该数据的左右边界,程序才能识别;LAST表示属性列的结束。比如办理理赔业务的流程号,在服务器的返回语句里是:
《input name=flowID type=“hidden“ value=L05012009110000035215》
做关联为:
web_reg_save_param(“LogFlowID“,
“LB=name=flowIDtype=\“hidden\“ value=“,
“RB=》“,
LAST);
定义的参数名就叫LogFlowID,表示流程号,易于明白;左边界从name取就可以标识了,也可取长点或短点,只要能区分;右边界只有》,写上就好;最后写上LAST。
在定义的左右边界中,如果有双引号,在脚本中是需要转义的,因为双引号在C中是有意义的,这里只要表示语句信息,加上右斜杠。尖括号直写。
左右边界也需要用双引号括起来。定义好的参数写在程序中,需要在加上单尖括号:swfLogFlowID={LogFlowID}
五. 脚本执行过程中的报错处理
1. vuser_init.c(3051):Error -26377: No match found for the requested parameter“proposalNo“. Check whether the requested boundaries exist in theresponse data. Also, if the data you want to save exceeds 256 bytes, useweb_set_max_html_param_len to increase the parameter size [MsgId: MERR-26377]
2. vuser_init.c(3051):web_submit_data(“UIPrPoEnInputNext.jsp“) highest severity level was“ERROR“, 4312 body bytes, 258 header bytes [MsgId: MMSG-26388]
两个错误一起出现,出错语句都是在关联函数下的提交数据函数位置,但是具体出错有可能是:
1). 关联函数左右边界没写对,所有信息都要用字符输入,不能是中文或其他。
2). 在关联函数确认写对的情况下,看提交数据函数中的业务设置,比如有可能是因为保单查询语句,设置的查询时间是过去的时间,新生成的投保单当然查不到,这样程序也会报这样的错。
3. loadrunner 执行理赔的立案处理,录制好脚本后,回放,报错:
脚本日志信息提示:
1.Action.c(400):Error -26366: “Text=立案信息提交成功“ not found for web_reg_find [MsgId: MERR-26366]
2.Action.c(400):web_submit_data(“claimSave.do“) highest severity level was“ERROR“, 4424 body bytes, 258 header bytes [MsgId: MMSG-26388]
脚本执行过程停止在立案信息提交页面,错误原因:数据问题,可能是有的应该变化的信息没有变。
在该流程中,一个报案号只能做一次立案,而初始脚本没有设置参数、关联,使用保单号进行查询,错误被掩盖。在立案系统中,一个保单号可以重复报案,但是一个报案号只能一次立案,要跑通流程,需要先将这一保单再重复报案,得到新的报案号。
六. 性能测试的场景设置
脚本录制完毕后,接着准备测试场景。
1.首先准备测试数据。比如车险投保,需要投保人和车架号信息来唯一标识一辆被保车,因此就需要将投保人和车架号做参数化处理,编辑文本框录入大量数据让脚本唯一读取:
1). 录入投保人参数,车架号参数,过程同脚本录制的参数化处理
2). 因为投保人和车架号一起生成一条投保数据,可设置车架号随投保人参数一起读取,设置步骤为:
投保人文件存放路径--File path
投保人参数数据读取方式
脚本按列名读取参数,每行数据读取一次,每次循环取一次新值。
接着设置车架号参数信息:
车架号参数读取文件路径设为和投保人文件路径一样
脚本按列名读取参数,行号选择和读取的投保人数据同一行
这样得到所需的投保单生成参数数据
2.设置测试场景
点击Tools-》Create Controller Scenarios,弹出场景类型选择框:

录入需要的虚拟用户数,选择生成结果存放路径和组名。确定后进入具体设置页面:
Quantity表示虚拟用户个数,group name为组名。
1). 设置运行时间选项Run – time Settings
选择循环次数Run Logic-》Iteration Count,设置循环10次,虚拟用户数为之前设置的5人,则预计一共可生成50张投保单。
设置思考时间,思考时间通常是录制脚本过程中,填写页面信息花费的时间,选择忽略项,节省跑脚本的时间。
设置网络连接时间,点击网络协议项Internet Protocol 的Options键,将弹出页面里的HTTP-request connect timeout和 HTTP-request receive timeout的数值改为1000。使得能在网络状况不太好的情况下向服务器发送接收数据。
2). 设置EditSchedule
选择虚拟用户加载方式:

可以一次加载所有用户,也可以按需要设置,一秒加载一个用户或其他。
选择结束方式:

当选择一秒加载一个用户时,结束设置为直到跑完所有脚本停止执行。如果选择选择一次加载所有用户可以选择运行多少时间后停止和不停止选项。
这些设置完成后,一次测试场景布置完成。可以进行基线检查或单点并发测试。
七. 性能测试步骤
一). 除测试工具外性能测试必备的系统及业务知识
1、熟悉保险行业业务特点,有助于与开发和客户讨论需求,制定测试用例;
2、熟悉系统的实现特点,开发实现方式,有助于选择程序处理复杂、消耗系统资源的用例点;
3、熟悉数据结构,了解数据存储规则,对脚本调试、数据准备、测试执行和监视都有帮助;
4、熟悉系统所使用的数据库、操作系统、中间件的监视和性能问题查看,有助于测试监视和发现问题;
5、熟悉系统架构及系统集成方式,有助于分析及明确定位性能问题。
二) 性能测试执行过程
1. 基线检查
1).目的:验证环境是否可用;
验证脚本是否能在场景正常执行。
2).方法:1个人单独循环5次--没有其他人干扰,干净的环境
3).结果:一般一个事物的响应时间超过3秒就可能存在问题,要提报开发人
2. 单点并发
1).目的:为了快速的发现问题,如多进程的锁机制,看是否相互间有影响。
2).方法:一般是10人或20人执行10到15分钟,执行过程忽略思考时间。
忽略思考时间可以减少客户端时间,加快向服务器传送数据速度,很大程度上增大了服务器的压力,20个人单点并发的压力就相当于200人正常执行带给服务器的压力。
3).单点测试的数据可以用来进行混发测试,但是有可能单点测试的数据不足以进行混发,需要自己再准备足够的数据。
3.方案测试--混发测试
1).目的:模拟生产环境
2).方法:执行1小时左右,加上思考时间
八.资源监控及调优
性能测试执行过程中,需要监控系统各项资源,看是否能满足用户实际需要,如内存使用,SQL SERVER等,结合LR生成的分析报告,分析系统哪里可能存在问题,需要改进,进行调优,这也是我之后要接着进行学习的地方。
1. 学习使用weblogic,了解weblogic常配参数的意义。通过weblogic自身的监控台,可以了解到目前的JVM的大小、数据库连接池的使用情况以及目前连接的客户端数量以及请求状况等等。
2. 学习oracle使用,熟悉它的体系结构,尤其是oracle10里 的awr,awr能采集与统计数据,并从那些统计数据中导出性能量度,以跟踪潜在的问题。
3. 需要继续学习LR的理论知识和实际操作,参考书籍《Web性能测试实战》、《软件性能测试过程详解与案例剖析》
-是什么意思

loadrunner 分哪三个部分


loadrunner 分为脚本生成器,场景控制器,结果分析器三个部分。LoadRunner,是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题。-run

扩展资料

定位性能:

LoadRunner内含集成的实时监测器,在负载测试过程的任何时候,您都可以观察到应用系统的运行性能。这些性能监测器为您实时显示交易性能数据以及其它系统组件包括application server,web server,网路设备和数据库等的实时性能。-是什么意思

利用LoadRunner的ContentCheck TM ,您可以判断负载下的应用程序功能正常与否。ContentCheck 在Virtual users 运行时,检测应用程序的网络数据包内容,从中确定是否有错误内容传送出去。-run

参考资料:百度百科-loadrunner



使用LoadRunner怎么进行性能测试


1、明确压力点,根据压力点设计多少种场景组合
  2、把文档(包括多少种场景组合、场景与场景组合条件的对应表)写好
  3、如果监测UNIX机器,在被监测的机器需要安装监测Unix的进程
  4、让开发人员帮助我们准备测试数据或他们写相关的文档我们来准备数据
  5、让开发人员做一个恢复数据的脚本,以便于我们每次测试的时候都能够有一个相同的环境
  6、针对每一个模块包括四个子文件夹:如模块A下包括“脚本”“场景”“结果”“图表” 四个子文件夹,每个子文件夹储存对应的文件,如下表所示
  其中:结果名“1场景”是在场景中的“Results Setting”中设置的,具体的设置见“建立场景”部分,这里也可以有另外一种方法:在打开模板设置,如下:
  选中“Automatically save the session as:”并且在“%ResultDir%”后面填写你想保存的文件名,当你打开某个lrr文件时,系统自动在当前目录中生成一个文件保存分析图表,如下图所示:
生成测试脚本
1、 把登陆部分放到“vuser_init”部分,把需要测试的内容部分放到“Action”部分执行;但是如果是模拟多个用户登陆系统,则要把登陆部分放到Action部分来实现
  2、 录制脚本后,想查询某个函数的原型,按“F1”键
  3、 确认脚本中哪些参数是需要进行参数化的(最好能可以和开发人员一起确认)
  4、 在脚本参数化时把函数web_submit_data()中的ITEMDATA后面的数据参数化,因为这些数据是传递给服务器的,当然也可以把一个函数中的所有相同变量都替换掉
  5、 脚本中无用的部分用“/*”“*/”“//”注释掉,但最好不要删除
  6、 调试脚本遵循以下原则:
  确认在VU里SUSI(单用户单循环次数single user & single iteration)
  确认在VU里SUMI(单用户多循环次数single user & multi iteration)
  确认在controller中MUSI(多用户单循环次数multi user & single iteration)
  确认在controller中MUMI(多用户多循环次数 multi user & multi iteration)
  7、 事务的名称取的有意义便于事务之间的区分,把所有的事务名都记录在一起,便于在测试结果概要中区分它们,这要写成一个表:某次测试有哪些模块,每个模块中有哪些事务(见对应的“关系表”)
  8、 在 “Parameter List”中可以选择参数类型“Random Number”,使某一个参数取设定的范围内的随机值
建立场景
1、 把场景名称编号,并制定出一份场景名称和场景条件组合的对应表。比如,场景m对应于“某一模块_xx个vu _分z台machine”(见“关系表”中的例子)
  2、 根据上面的对应表把场景设置好,需要设置的要素如下:总体多少个用户、分多少个组、每个组有多少个用户、分几台机器运行、每个脚本迭代多少次、是否回放think time时间、检查Parameter List中每个参数设置是否正确、参数从表中取值间隔是否正确、是否选中“Initialize all Vusers before Run”
  3、 测试结果应该保存为“m场景0,m场景1,…”
  4、 把虚拟用户分散到几台机器上和在一台机器上面都要进行测试,因为有可以效果不同
  5、 场景中如果有需要改动的地方,必须新建一个场景(建议使用“另存为”,然后再修改结果文件名,再选择相应的脚本),并把场景按顺序编号,先维护好场景与场景组合条件的对应表,以便以后的查找,并且在结果 “Results Setting”中设置的结果名与场景名相同。建议在“Results Setting”中选中“Automatically create a results directory for each scenario executeon”让它每次自动累加,不建议选中“Automatically overwrite existing results directory without prompting for confirmation”,因为我们不要覆盖掉以前的测试结果,把它保存下来以便有个根据。
  6、 需要注意的地方:当在“Parameter List”中的“Select next row”选中“Unique”时,如果再在“Edit Schedule\Schedule by Scenario\Duration”中选中第二项“Run for XX after the ramp up has been completed”时系统就会报错,提示“Unique”类型不相符。
  7、 在“Run-time Setting”设置中,“General”中的“Pacing”非常有用,可以设置每次迭代之间相隔多少时间,也可以是随机的取值
  8、 建议:把“Parameter List”和“Run-time Setting”中的所有设置都搞熟悉,这样便于以后对脚本和场景进行设置
  9、 设计“Parameter List”时的小技巧:即在“Allocate X values for each Vuser”时,尽量 把它的间隔在数据容许的范围内取大些,这样可以做从一次迭代到最大值迭代,而且对脚本没有什么影响
  10、当一个脚本中有多个事务,在事务前面增加集合点时需要一点技巧。或者我们把脚本复制几个,或者我这样做:测试前面的事务的压力时,把后面的事务前的集合点设置为不激活状态;在测试后面的事务的压力时,把前面的事务的集合点设置为不激活状态,另外最好不选中Initialize all Vusers before Run,具体参见Controller中的“Scenario/Rendezvous”,及用户手册(按F1)
  11、把持续时间从最后60秒改为整个场景的时间,右键单击某个图,选择“Configue”,修改Graph Time即可
  12、每次从一个场景修改后保存为另一个场景时别忘记把结果保存文件名修改相对应的文件名。在设置结果保存文件名时有一个技巧:如果你打开这个窗口时,点击确定则系统会
  默认以“4场景2”为基点向后加“4场景20”“4场景21”等等,但是如果你把结果文件名后面的数据去掉,改为“4场景”,点击确定后,系统会自动搜索是以“4场景”开头的文件名,并在它的后面继续增加,比如把它改为“4场景”时,下次结果保存在“4场景3”中。而且他在搜索的时候搜索以“4场景”开头的文件名,从0开始,有的话就不取代而跳过,没有的话就取代。
运行场景 
1、 运行场景前需要注意的事项:每个组的虚拟用户数、迭代次数、think time、参数化时的取值间隔、执行恢复数据的脚本、确认虚拟机的LoadRunner Agent Service打开
  2、 如果监测Unix,运行场景前需要启动监测Unix进程,启动的命令“rpc.rstatd”、查看这个进程是否启动的命令“rpcinfo –p”
  3、 运行前使Generator机器处理Ready状态
  4、 确认被监测的机器已经连接上去,并且添加自己所需要的计数器
  5、 运行之前一定要确认系统中压力点的数据量是多少
  6、 确认以上都正确时再运行测试场景
监视场景
打开 “Passed Transactions”或“Failed Transactions”,可以随时观察到事务的运行状态
分析测试结果
  1、 打开Analysis后,把经过数据处理的结果图表保存到“图表”文件夹,并且文件名和场景名、结果名相同,这样便于以后的查阅。也可以省去每次进行数据处理的时间。
  2、 可以通过点击界面上的 “View Run Time Setting”可以看到此场景运行时的一些场景设置
  3、 在关联图表时可以自动调节每个元素的比例,点击右键,选择 即可
  4、 每次测试结束后确认所做的操作是正确的,确认正确后再分析结果
  5、 在结果文件夹中为每个场景建立一个文档,把每次运行时的情况记录下来以便于写测试报告,尤其运行错误的原因记录下来,并把开发人员所做的修改也记录下来以便知道开发人员做了些什么修改
  6、 在分析运行结果时可以把几个结果合在一起进行比较,打开如下“Cross with Result…”
-是什么意思

杭州电子科技大学的acm上1004,我下面的代码为什么会出现 runtime error(access_violation)拜托各位大神


runtime error(access_violation)是运行时错误,非法访问内存,比如数组越界或者堆栈溢出。 看看题目要求: Input contains multiple test cases. Each test case starts with a number N ( 0 《 N 《= 1000 ) -- the total number of balloons distributed. The next N lines contain one color each. The color of a balloon is a string of up to 15 lower-case letters. A test case with N = 0 terminates the input and this test case is not to be processed. 而你的程序: a=(char **)malloc( 10 *sizeof(char *)); 用个超过10个的case就越界了。
-run

韦伯英英字典里面对brung的解释是:“chiefly dial past and past port of BRING”,这句话是什么意思


Chiefly (主要地/首要地);dial 疑似dialect (方言/土话)的缩写形式. past and past part. ( 过去式和过去分词 )。整个在一起就是对brung这个词的解释,意思是:brung 主要用在方言里,是BRING(带来)的过去式和过去分词。-是什么意思


thread 和 runnable 的区别


/*
你好,我这两天也在学这个,刚好卡住这里了,和你交流一下,也顺便提醒我一下,我尽量保持通俗,能不能看懂,全看造化了!
首先明白一点.如果你想创建一个线程,少不了Thread这个类的对象,我意思就是说,Thread是Java给我们提供的一个工具,你就暂时这么理解!
就算你用Runnable接口,你也少不了Thread这个类,只有这个类才可以帮助创建自定义的线程!
Thread相当于一个写好的工具放在那里,你可以直接拿来就用,Runnable相当于这个工具的扩展!
这个已经做好的工具,可以直接用,但是功能受到一些限制,加上这个接口功能就强大很多了!
自定义线程两种方式都离不开Thread!
第一就是:
继承他,做他的子类,子类就是一个线程类了,对象已建立就算有了线程了,然后启动即可!
第二就是:
自定义一个类去实现runnable接口,因为Thread也实现了这个接口,这就相当于,你自定义的类,和Thread都拥有相同的一个接口,你可以理解成规则!
Thread的构造函数接受runnable这种“规则“的类,这个没理由,这个是Java设计的,这点是死的!
Java用start启动就是在启动操作系统,帮你分配!
然后你可以创建一个Thread的对象,把你自定义的类对象,丢进去,然后启动,他帮你执行!
区别就是:在资源共享上面,你的自定义类,用实现接口的方式,很轻松的操控!
当然还有别的,比如说,线程休眠,唤醒,等等..我就不在例举了......
其实吧,继承thread也可以实现资源共享,这里我就不说静态变量了,其实还有别的办法!
百度上,你可以看看,千篇一律都是照着教程写的文字,我也不敢说自己总结的就很好!
多线程很重要,不要贪快!
不足之处还请指点!!!
*/
-run