• 1. Web中间件介绍 及tomcat、weblogic优化
  • 2. 课程J2EE技术及相关服务器介绍 WebLogic 简介 Web应用服务管理 JDBC服务 WebLogic集群技术 调优简介
  • 3. Part 1 J2EE服务器介绍
  • 4. Java 2 平台J2SE(Java 2 Platform Standard Edition) Java 2 平台标准版 J2EE(Java 2 Platform Enterprise Edition) Java 2 平台企业版 J2ME(Java 2 Platform Micro Edition) Java 2 平台微型版
  • 5. J2SE( Java 2 平台标准版)
  • 6. J2ME( Java 2 平台微型版)
  • 7. J2EE -- Java 2 平台企业版 ( Java 2 Platform,Enterprise Edition) 在Java基础上的一套技术规范(完整的解决方案) J2EE应用服务器(实现、扩展了技术规范的中间件产品) J2EE应用程序组件(利用相关API的业务实现) J2EE应用服务器和应用程序组件以及关联的其它软件构成了基于J2EE的软件系统。
  • 8. J2EE的相关技术核心Servlet 、JSP、EJB数据库JDBC命名和目录服务JNDI消息服务JMS( Java Message Service )EmailJava Mail分布式计算RMI、RMI-IIOP事务JTA(Java Transaction API)数据格式化XML、HTML、XSL协议TCP/IP、HTTP(S)、IIOP、SSL安全JAAS
  • 9. J2EE的特点提供面向服务的底层结构; 分布式; 基于组件; 良好的移植性(标准规范应用); 良好的结构设计; 支持多种技术,具有良好的兼容性; 明确应用系统中的角色—明确分工; 完整的解决方案。
  • 10. J2EE典型的层次结构
  • 11. 基于Web的J2EE层次结构
  • 12. Part 2 J2EE开发环境
  • 13. 常用应用开发环境介绍 在开发过程中,基于J2EE-Web项目通常涉及到: Web服务器 数据库服务器 集成开发环境的选择
  • 14. J2EE的Application ServerJetty (目前google/Yahoo使用) 体积小,灵活,适合作为嵌入式应用 Tomcat 集群和监控支持较好,实现规范,是SUN支持的项目 Jboss 被Redhat公司收购支持EJB3.0规范。WEB容器与Tomcat绑定。 Resin 对servlet和JSP提供了良好的支持,性能也比较优良,运营网站多用 Oracle Weblogic IBM Websphere Application Server Borland AppServer Sybase Application Server HP Application Server 金蝶Apusic
  • 15. 集成开发工具Borland:JBuilder Oracle :JDeveloper Bea :WebLogic Workshop IBM:Websphere Studio Sun:NetBeans MyEclipse
  • 16. Web服务器 在小型的应用系统或者有特殊需要的系统中,可以使用一个免费的Web服务器Tomcat,该服务器支持全部JSP以及Servlet规范,但是目前还不支持EJB,启动界面如图 :
  • 17. Web服务器 WebLogic是BEA公司的产品,是目前应用最广泛的Web服务器,支持J2EE规范,而且不断的完善以适应新的开发要求,启动界面如图:
  • 18. WebLogic Server简介发布公司 原Bea公司,现已并入Oracle 产品定位 基于J2EE架构的应用服务器 用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器 市场份额 在应用服务器领域占有最大份额 最新版本 WebLogic11.*
  • 19. WebLogic的版本WebLogic Server 8.1 (Java 1.4、J2EE 1.3) WebLogic Server 9.x (Java 5、J2EE 1.4) WebLogic Server 10.0 (Java 5、Java EE 5) WebLogic Server 10.3 (Java 6、Java EE 5) WebLogic Server 11gR1(10.3.x) (Java 6、Java EE 5) 软件授权:自从oracle收购了bea之后,WebLogic的序列号全都开放了,没有必要再去进行破解了。19
  • 20. Web服务器 另一个常用的Web服务器是IBM公司的WebSphere,支持J2EE规范,启动界面如图:
  • 21. WebSphere系统简介 WebSphere是IBM的一套软件产品,包括WebSphere应用服务器,WebSphere Studio和 WebSphere Performance Pack。还有其他一些产品加入进来做为补充和扩展 WebSphere是一套完整的电子商务平台,在此平台上WebSphere提供了一系列基于统一的基础平台、完全基于开放标准的相关产品组件
  • 22. WebSphere介绍 WebSphere应用服务器提供三个等级的版本,它们是:    标准版(Standard Edition),是整个应用服务器家族的基础,提供从电子商务网站的建构、发布 到管理能力。标准版提供了开放、标准的平台和工具,以加速向电子商务的迁移。新加入的DB2UniversalDatabase5.2 支持,使开发者能够设计更强大有效的应用。WebSphere应用服务器标准版V1.1已经面世。包 括Servlet运行时引擎(RuntimeEngine),高性能的数据库连接程序(提供预联接,会话和状态管理的 应用服务,以及支持XML(eXtensibleMark-upLanguage)文档结构.   高级版(Advanced Edition),在标准版本的基础上,又增加了对安全性和交易处理能力的强化支持。连接已有的 数据库系统和基于主机的交易系统。并提供了复杂的工具以简化分布式组件应用的开发.   企业版(Enterprise Edition),提供了一个高可靠性的解决方案,能够将电子商务应用移植进关键性的企业环 境,起到平衡现有IT系统的作用。它组合了IBM享誉世界的交易环境TXSeries,和ComponentBroker,IBM的一个支持 完全的分布式对象访问和商务处理连接能力的产品。所有现在运行在TXSeries或ComponentBroker上的应用将在 Webshpere企业版中得到完全支持。   
  • 23. 数据库服务器 在Java相关的开发领域中,常用的是3种数据库:Oracle、DB2和MySQL。有时候也使用微软公司的SQL Server数据库服务器 。 Oracle数据库是Oracle公司的产品,也是历史最悠久的数据库,世界前50强的企业中,80%使用Oracle数据库作为公司的数据库服务器。服务器的图标如图 :
  • 24. 数据库服务器IBM公司的DB2也是一种常用的数据库,和IBM的WebSphere配合构成完整的企业级解决方案,数据库服务器的启动界面如图:
  • 25. 数据库服务器目前商业数据库服务器市场三足鼎立:Oracle、DB2和微软公司的SQL Server,在实际应用中,有一个常用的免费的小型数据库服务器:MySQL,启动界面如图:
  • 26. Part 3 tomcat优化介绍
  • 27. TOMCAT目录结构目录结构七层
  • 28. TOMCAT目录结构CATALINA_HOME指的是tomcat的安装目录,如C:\Tomcat6.0 bin目录:控制tomcat的启动与关闭,以及与启动关闭有关的安全管理 conf目录:配置文件 lib目录:Tomcat容器使用的所有jar包和多个web应用程序共享的jar包 log目录:Tomcat生成的日志文件。日志文件是按天为单位生成 temp目录:Tomcat用来存放临时文件 webapps目录: Tomcat默认的web应用程序存放位置 work目录: Tomcat将jsp文件转换为java servlet的地方
  • 29. TOMCAT目录结构server.xml: Tomcat中最重要的配置文件,定义了tomcat的体系结构设置端口,集群,web应用,访问日志等主要功能。 tocmat-users.xml: Tocmat管理员身份的配置文件关键是设置管理员账号的密码 context.xml: 全局context的配置文件。将数据库JNDI在这里定义好 logging.properties: Tocmat日志配置文件以修改默认的Tocmat日志路径和名称
  • 30. TOMCAT端口管理说明:当一个server需要部署2个或2个以上TOMCAT时,请按照本规则进行部署 目的:统一端口使用规则,避免端口冲突,合理规划端口资源,方便故障诊断 注意: 1,正式环境中,虽然ajp和http仅会用到其中之一端口,但不要取消ajp或者http端口 2,出现端口争用问题后,可以使用probe查看TOMCAT占用端口信息 3,有些操作系统,当端口出现争用情况后,OS可能会另外为TOMCAT分配一个端口 4,不要分配8000以下端口给TOMCAT,即使OS仅保护1024以下端口 5,正式环境部署,请参照端口TOMCAT端口管理表部署 6,443类端口可在http端口前统一加3即可。 例如,8080端口对应的443实际端口就是38080
  • 31. TOMCAT端口管理表项目名Shutdown端口 http端口Ajp端口mio8080800080809000mio8081800180819001mio8082800280829002mio8083800380839003mio8084800480849004mio8085800580859005mio8086800680869006mio8087800780879007mio8088800880889008mio8089800980899009
  • 32. TOMCAT配置数据库 设置: 1,修改TOMCAT_HOME/conf/context.xml 2,将数据库的JDBC驱动放入TOMCAT_HOME/lib下 3,重启TOMCAT,进行验证即可 4,使用方法: Resource name=“jdbc/MioDS”中明确指出 名称是“jdbc/MioDS” 5,代码中DataSource ds =(DataSource)ctx.lookup("java:comp/env/jdbc/MioDS"); 优点: 1,管理:不需要修改代码即可以适应开发,测试,正式环境,因为名称都是“jdbc/MioDS” 2,监控:TOMCAT监控程序可以实时显示数据源状态 3,安全:项目开发和测试人员不必知道数据库账号这类敏感信息 4,性能:使用连接池可以提升系统效能 注意:文章中使用的“jdbc/MioDS”仅仅是示例作用,可以根据项目具体命名
  • 33. TOMCAT配置数据库context.xml文件示例 WEB-INF/web.xml 具体参数含义参考: http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html
  • 34. TOMCAT监控软件安装监控软件:Lambda Probe 软件介绍:Lambda Probe(Tomcat Probe)是一个基于Web以实时的方式来管理单 个Tomcat主机的工具。它除了具备标准Tomcat Manager大部份功能之外 还提供一些能够帮助Web开发者和系统管理员更加清楚地了解Tomcat运 行情况的功能。 登陆账号: tomcat-users.xml文件中设置的user账号具有admin,manager的role 安装方法:1,以命令行方式启动的tomcat 在catalina.bat/catalina.sh中 在JAVA_OPTS项中添加-Dcom.sun.management.jmxremote 2,以服务方式启动的tomcat 在JAVA OPTIONS中添加一行 -Dcom.sun.management.jmxremote 3,将probe.war安装包放在tomcat_home/webapps下即可 管理界面:http://localhost:8080/probe
  • 35. TOMCAT环境变量正确方法:在需要运行的tomcat的catalina.sh/catalina.bat中设置java_home变量即设置了三个变量 java_home, catalina_home, catalina_base 设置catalina_home,catalina_base危害: 导致被设置的服务器仅能在指定CATALINA_HOME目录中运行唯一的TOMCAT 注意: 1,不要在正式系统中部署安装版的TOMCAT 2,不要在任何系统path中写入TOMCAT环境变量,包括CATALINA_HOME, CATALINA_BASE,JAVA_HOME
  • 36. TOMCAT和JVM的配置1,系统选型最重要:重要项目AP尽可能使用64位系统 64位系统JVM内存最高可以设置为3800MB左右 32位系统JVM内存最高可以设置为1500MB左右 单一TOMCAT 64位系统可以使用内存3800MB,32位仅能使用1500MB 2,根据系统物理内存大小合理设置下列五个参数catalina.sh/catalina.bat -server -Xms300m -Xmx300m -XX:PermSize=100m -XX:MaxPermSize=100m -Xms=-Xmx -XX:PermSize=-XX:MaxPermSize 正式服务器必须设置以上参数,以尽可能压榨服务器性能 以上参数经过长久验证,可以稳定运行在各种操作系统平台和JDK版本上 相关参数具体取值自己考虑,不要超过(物理内存-其他程序内存)的80%即可。 3,没有特殊理由,不要设置除上述五个参数之外的JVM参数 原因:1,无法保证各种操作系统平台的可移植性 2,过度干涉JVM内存管理会导致无法预料的后果
  • 37. TOMCAT和JVM的配置非服务方式启动的TOMCAT配置方法 修改 tomcat_home/bin/catalina.sh 添加以下内容: JAVA_HOME=/export/home/jdk1.6.0_16 JAVA_OPTS="-server -Xms3000m -Xmx3000m -XX:PermSize=400m -XX:MaxPermSize=400m -Dcom.sun.management.jmxremote“ 修改 tomcat_home/bin/catalina.bat 添加以下内容: set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_16 set JAVA_OPTS=-server -Xms300m -Xmx300m -XX:PermSize=100m -XX:MaxPermSize=100m -Dcom.sun.management.jmxremote 两者区别: linux/unix系统使用.sh文件,不需要set,但有”“ Windows系统使用.bat文件,需要set,但不能有”“ 64位系统JVM内存最高可以设置为3800MB左右 32位系统JVM内存最高可以设置为1500MB左右
  • 38. TOMCAT和JVM的配置服务方式启动的TOMCAT配置方法—针对WINDOWS系统 在JAVA选项中,设置JAVA OPTIONS,添加以下三个参数,每行一个,不能并列 -XX:PermSize=256m -XX:MaxPermSize=256m -Dcom.sun.management.jmxremote Initial memory pool 1000 Maximum menory pool 1000 不要设置thread stack size 该值依据操作系统会有很大不同
  • 39. TOMCAT基于名称的虚拟主机使用场景: 一个IP地址对应多个项目并且使用相同的端口号 例如80端口 使用条件: 有几个项目就要有几个域名并且域名与项目一一对应 使用范围: 国内IDC提供的虚拟主机都是基于名称的虚拟主机技术共享IP地址 缺点: 在使用虚拟主机的时候,仅能使用域名对项目访问不能使用IP访问 优点: 可以节省公网IP地址资源,节约成本。 因为1个公网IP地址成本远远高于5个域名的成本
  • 40. TOMCAT基于名称的虚拟主机设置方法: 1,通过修改server.xml文件设置tomcat_home/conf/server.xml的Engine下 每个host可以设置一个域名,并且可以绑定一些域名的别名 appBase指定的是项目的路径,可以使用绝对路径,也可以使用相对路径,也可以随意命名 可以设置非常多数量的域名用来指定到对应的项目上去,来解决公网IP紧缺问题 2,通过http://localhost:8080/host-manger/html访问tomcat控制台,通过页面进行设置
  • 41. TOMCAT访问控制使用情形:项目仅对部分用户开放,虽然有账号登陆功能,但是结合IP地址会更加安全 要求: 1,项目本身仅对部分用户开放,而不是部分功能对用户开放 2,针对用户群最好有固定的IP地址段则会使策略更加有效 设置:在tomcat_home/conf/server.xml中的Host中添加下面内容 42. TOMCAT访问日志记录使用情形:详细记录用户访问记录对很多问题都有帮助 益处: 1,提供项目日常访问量,用户数,来源等信息 2,分析问题时候快速定位问题用户 设置:在tomcat_home/conf/server.xml中的Host中添加下面内容 Pattern是设置日志格式的,可以使用pattern=“combined” 记录详细日志信息 resolveHosts是关于是否将IP转化为主机名 一般不需要,会影响系统性能
  • 43. TOMCAT设置SSL访问 SSL访问要求: 1,证书 server.key 2,密钥 password 设置方法:修改tomcat/conf/server.xml文件 将以下内容替换原来8443的即可,不要确保路径正确并存在证书
  • 44. TOMCAT传输压缩通过启用传输压缩功能,可以减少server的网络流量,节省带宽 Tomcat默认没有自动gzip压缩,可以尝试启用tomcat的gzip压缩。 部门建议: 使用apache处理前端请求,并且在apache端进行传输压缩的设置。减少AP的压力 Tomcat进行传输压缩的设置方法:修改server.xml 验证:http://www.gidnetwork.com/tools/gzip-test.php
  • 45. TOMCAT设置访问线程数 新的配置:    原来的配置
  • 46. TOMCAT的URL编码格式如果URL当中会有非英文字符,那么需要通过AP进行URL编码格式的定义,否则URL中的非英文字符无法保证正确解析。 无特殊要求的情况下,需要将URL编码设置为和项目统一的编码格式。 部门目前统一使用UTF-8字符编码方式
  • 47. TOMCAT集群和负载均衡模式: 1,故障转移 有两台tomcat A B,A负责接收请求响应,B作为A的故障转移服务器,不处理请求,仅在A宕机之后作为应急响应,才会处理请求。在A恢复之后,就又不接受请求了。 2,负载均衡 有两台tomcat A B,A B共同接受请求响应,分摊流量,一台宕机不会影响应用的使用,并且对用户透明 3,session复制 上述两种集群,当服务器宕机故障转移时,会影响宕机时的用户,之后的用户不会影响。
  • 48. TOMCAT集群和负载均衡最初架构: TOMCAT当前端AP处理所有请求
  • 49. TOMCAT集群和负载均衡第一次改进: Apache作为前端AP,提升稳定性 Apache将动态内容转发给tomcat处理
  • 50. TOMCAT集群和负载均衡第二次该进: Tomcat做负载均衡接受apache请求 这样可以避免tomcat宕机导致应用不可用 因为apache宕机的概率远远小于tomcat 另外,维护操作可以不影响业务运行
  • 51. TOMCAT集群和负载均衡第三次该进: Tomcat进行session复制,从而保证 任何业务和用户都不会因为停机而中断
  • 52. TOMCAT集群和负载均衡第四次该进: 消除apache单点故障利用LVS 目前,我们使用的是F5硬件设备实现 LVS的部分, 提升稳定性,降低复杂程度。
  • 53. Part 3 WebLogic 简介
  • 54. 域(Domains)域是管理的单元或边界; 作为一个单元来管理的,并相互关联的一组Weblogic 服务器资源被称为域; • 域由单一的管理服务器来管理。
  • 55. 机器(Machines)可以对应到服务器所在的物理硬件; 可以是Unix或non-Unix类型; 可以用来远程管理和监控;
  • 56. 服务器(Servers) 服务器是执行在单一Java虚拟机 (JVM)中weblogic.Server类的实例。 服务器: 最多和一个WLS机器关联 占用一定数量的RAM 是多线程的
  • 57. 被管理服务器 (Managed Server) WebLogicServer的一个实例; 从管理服务器远程加载配置信息‘; 可以是也可以不是集群的一部分。
  • 58. 集群 (Clustering) WebLogic集群技术指通过一组服务器共同 工作,在多台机器间复制应用表示层和应用逻辑层的能力,实现关键业务系统的负载分布,消除个别故障点; 集群用来 实现负载 均衡和容错。
  • 59. 域的典型架构
  • 60. Part 4 Web应用的部署
  • 61. WebLogic Server的安装 1.Windows下安装 直接双击 或 输入命令 : D:\>weblogic9xx_win32.exe 2.安装如下图:
  • 62. 1.1 WebLogic Server的安装 选择 下一步 开始安装weblogic。
  • 63. 1.1 WebLogic Server的安装 BEA Weblogic 的安装 完成。
  • 64. 1.3 WebLogic Server目录及文件的含义 Weblogic Server Domain的核心配置文件: [path]\[user_projects]\[domain_name]\config\config.xml 如:D:\bea9\user_projects\domains\mydomain\config\ config.xml 内容包含如:端口修改 AdminServer 7001
  • 65. 1.4 WebLogic Server启动/停止服务器1. Windows下启动服务器 a.命令启动 D:\>cd bea\user_projects\domains\mydomain D:\ . . .>startWeglogic.cmd b.界面启动 如下图:
  • 66. 1.4 WebLogic Server启动/停止服务器
  • 67. 1.4 WebLogic Server启动/停止服务器1. Windows下停止服务器 a.命令停止 D:\>cd bea\user_projects\domains\mydomain D:\ . . .>stopWeglogic.cmd b.界面停止 如启动界面,单击Stop Admin Server
  • 68. Part 5 JDBC服务
  • 69. JDBC DriverJDBC Driver有四种类型:
  • 70. JDBC驱动JDBC有四种驱动,分别是: 第一类:JDBC-ODBC桥,再加上ODBC驱动程序。 第二类:本机API,部分是Java的驱动程序。 第三类:面向数据库中间件的纯Java驱动程序。 第四类:直接面向数据库的纯Java驱动程序。 第三、四两类都是纯Java的驱动程序,因此,对于Java开发者来说,它们在性能、可移植性、功能等方面都有优势。
  • 71. 常见数据库驱动配置连接池需要知道特定数据库URL、数据库属性及相应驱动类
  • 72. Weblogic与JDBC驱动Weblogic提供的的JDBC驱动程序:Oracle、Sybase、SqlServer、Informix、DB2、pointbase 第三方驱动程序,第三方的驱动程序要和Webloigc一起工作,必须符合以下标准: 必须是线程安全 必须是EJB可访问的 最好支持JDBC2.0
  • 73. 连接池•连接池是在Weblogic启动时候预先建立的数据库连接,由Weblogic在运行时负责维护。 •可以减少程序每次数据库请求都要新创建数据库物理连接的时间及资源。 •对数据库属性的更改只需通过控制台进行,不需改动客户端代码
  • 74. 在控制台配置连接池
  • 75. 监控JDBC连接池Waiters Hight字段指明了最多有多少客户等待数据库连接 Waiters字段告诉你当前有多少客户正在等待连接 Connections Hight字段给出最大的并发连接数。 Wait Seconds Hight字段显示了客户等待数据库连接的最长时间
  • 76. MultiPool(多池) 多池的作用: 为防数据库连接失败提供冗余备份或高有效池 为高用户访问量提供数据库负载均衡,负载均衡池 备份池 一个备份池由一个有顺序的连接池列表组成 负载均衡池 使用简单的循环算法将连接请求平衡地分到在列表中的每一个池
  • 77. 数据源的使用数据源对应一个数据库连接池。客户程序可以通过数据源绑定的JNDI名字得到该数据源的引用,并通过数据源对象得到数据库连接。
  • 78. ExampleHashtable ht = new Hashtable(); ht.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); ht.put(Context.PROVIDER_URL, "t3://192.168.0.9:7080"); ht.put(Context.SECURITY_PRINCIPAL,"weblogic"); ht.put(Context.SECURITY_CREDENTIALS,"weblogic"); Context ctx = new InitialContext(ht); DataSource newDataSource = (DataSource) ctx.lookup( "OrclDataSource"); conn = newDataSource.getConnection();
  • 79. Part 6 调优
  • 80. 调优通常应用系统会根据用户数、并发数、用户的行为等等来确定具体的性能目标, 如果确定应用程序不能满足性能目标,那么就需要优化、重构程序并调整JVM、应用服务器、数据库、OS 或者改变硬件配置等等
  • 81. 影响Java 性能的主要因素硬件,如CPU、内存、体系结构等等 操作系统 数据库系统 JVM 应用服务器 数据库服务器 网络环境 应用架构及程序编写水平
  • 82. 性能调整的步骤1、 使用工具测试系统是否满足性能目标 2、 发现性能瓶颈 3、 假设瓶颈的原因 4、 测试你的假设 5、 如果假设成立,更改这一部分 6、 测试确定更改是否可以提高性能,衡量性能提高的程度 7、重复以上步骤,直到获得可以接受的性能。
  • 83. WebLogic 主要使用 的JVMSUN HotSpot JVM BEA JRockit JVM 不同的JVM,其可设置的参数和监控的工具将是不同,后面将分别介绍这两种JVM的设置。 在Intel架构和windows平台上,建议使用JRockit JVM,这样可以带来更优的性能。83
  • 84. WebLogic实例主要设置内容启动参数设置 主要是设置GC参数 线程设置 主要是设置线程的数量 数据库连接池的设置 主要是设置连接池的初始容量和最大容量 84
  • 85. 80/20法则在对系统进行优化的时候,必须把导致最大优化效果的因素找出来。 如果客户端与服务端之间传输的数据量比较大,应检查一下网络的速度是不是正常,看网络是不是性能瓶颈; 如果客户端与服务端传输的数据量比较小,但服务端有大量的数据库操作,则很有可能数据库是性能的瓶颈, 如果增加连接池数量后,没起多大的作用,而且数据库的压力很大,则数据库可能是性能的瓶颈
  • 86. WebLogic 9.2 启动文件%WL_HOME%\common\bin\commEnv.cmd 设置所有实例统一的运行参数 %DOMAIN_HOME%\bin\setDomainEnv.cmd 设置本实例的运行参数 %DOMAIN_HOME%\bin\startWebLogic.cmd 运行启动脚本86
  • 87. WebLogic 9.2 实例的线程设置.线程管理与WebLogic 8.1存在很大的不同,由WebLogic自动去管理。 默认情况下,WebLogic提供的线程数量较小,并且在管理控制台上没有修改线程数量的链接。87
  • 88. .WebLogic 9.2 实例的线程设置可以通过手动修改config.xml文件,使用与weblogic 8.1相同的线程设置风格。 主要是在中添加以下代码:88