java什么叫回写,java多线程开发的同步机制有哪些
大家好,今天来为大家分享java什么叫回写的一些知识点,和java多线程开发的同步机制有哪些的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
java多线程开发的同步机制有哪些
Java同步
标签:分类:
一、关键字:
thread(线程)、thread-safe(线程安全)、intercurrent(并发的)
synchronized(同步的)、asynchronized(异步的)、
volatile(易变的)、atomic(原子的)、share(共享)
二、总结背景:
一次读写共享文件编写,嚯,好家伙,竟然揪出这些零碎而又是一路的知识点。于是乎,Google和翻阅了《Java参考大全》、《Effective Java Second Edition》,特此总结一下供日后工作学习参考。
三、概念:
1、什么时候必须同步?什么叫同步?如何同步?
要跨线程维护正确的可见性,只要在几个线程之间共享非 final变量,就必须使用 synchronized(或 volatile)以确保一个线程可以看见另一个线程做的更改。
为了在线程之间进行可靠的通信,也为了互斥访问,同步是必须的。这归因于java语言规范的内存模型,它规定了:一个线程所做的变化何时以及如何变成对其它线程可见。
因为多线程将异步行为引进程序,所以在需要同步时,必须有一种方法强制进行。例如:如果2个线程想要通信并且要共享一个复杂的数据结构,如链表,此时需要
确保它们互不冲突,也就是必须阻止B线程在A线程读数据的过程中向链表里面写数据(A获得了锁,B必须等A释放了该锁)。
为了达到这个目的,java在一个旧的的进程同步模型——监控器(Monitor)的基础上实现了一个巧妙的方案:监控器是一个控制机制,可以认为是一个
很小的、只能容纳一个线程的盒子,一旦一个线程进入监控器,其它的线程必须等待,直到那个线程退出监控为止。通过这种方式,一个监控器可以保证共享资源在
同一时刻只可被一个线程使用。这种方式称之为同步。(一旦一个线程进入一个实例的任何同步方法,别的线程将不能进入该同一实例的其它同步方法,但是该实例
的非同步方法仍然能够被调用)。
错误的理解:同步嘛,就是几个线程可以同时进行访问。
同步和多线程关系:没多线程环境就不需要同步;有多线程环境也不一定需要同步。
锁提供了两种主要特性:互斥(mutual exclusion)和可见性(visibility)。
互斥即一次只允许一个线程持有某个特定的锁,因此可使用该特性实现对共享数据的协调访问协议,这样,一次就只有一个线程能够使用该共享数据。
可见性要更加复杂一些,documents它必须确保释放锁之前对共享数据做出的更改对于随后获得该锁的另一个线程是可见的——如果没有同步机制提供的这种可见性保证,线程看到的共享变量可能是修改前的值或不一致的值,这将引发许多严重问题
小结:为了防止多个线程并发对同一数据的修改,所以需要同步,否则会造成数据不一致(就是所谓的:线程安全。如java集合框架中Hashtable和
Vector是线程安全的。我们的大部分程序都不是线程安全的,因为没有进行同步,而且我们没有必要,因为大部分情况根本没有多线程环境)。
2、什么叫原子的(原子操作)?
Java原子操作是指:不会被打断地的操作。(就是做到互斥和可见性?!)
那难道原子操作就可以真的达到线程安全同步效果了吗?实际上有一些原子操作不一定是线程安全的。
那么,原子操作在什么情况下不是线程安全的呢?也许是这个原因导致的:java线程允许线程在自己的内存区保存变量的副本。允许线程使用本地的私有拷贝进
行工作而非每次都使用主存的值是为了提高性能(本人愚见:虽然原子操作是线程安全的,可各线程在得到变量(读操作)后,就是各自玩
弄自己的副本了,更新操作(写操作)因未写入主存中,导致其它线程不可见)。
那该如何解决呢?因此需要通过java同步机制。
在java中,32位或者更少位数的赋值是原子的。在一个32位的硬件平台上,除了double和long型的其它原始类型通常都
是使用32位进行表示,而double和long通常使用64位表示。另外,对象引用使用本机指针实现,通常也是32位的。对这些32位的类型的操作是原
子的。
这些原始类型通常使用32位或者64位表示,这又引入了另一个小小的神话:原始类型的大小是由语言保证的。这是不对的。java语言保证的是原始类型的表
数范围而非JVM中的存储大小。因此,int型总是有相同的表数范围。在一个JVM上可能使用32位实现,而在另一个JVM上可能是64位的。在此再次强
调:在所有平台上被保证的是表数范围,32位以及更小的值的操作是原子的。
3、不要搞混了:同步、异步
举个例子:普通B/S模式(同步)AJAX技术(异步)
同步:提交请求->等待服务器处理->处理完返回这个期间客户端浏览器不能干任何事
异步:请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕
可见,彼“同步”非此“同步”——我们说的java中的那个共享数据同步(synchronized)
一个同步的对象是指行为(动作),一个是同步的对象是指物质(共享数据)。
4、 Java同步机制有4种实现方式:(部分引用网上资源)
① ThreadLocal② synchronized()③ wait()与 notify()④ volatile
目的:都是为了解决多线程中的对同一变量的访问冲突
ThreadLocal
ThreadLocal保证不同线程拥有不同实例,相同线程一定拥有相同的实例,即为每一个使用该变量的线程提供一个该变量值的副本,每一个线程都可以独立改变自己的副本,而不是与其它线程的副本冲突。
优势:提供了线程安全的共享对象
与其它同步机制的区别:同步机制是为了同步多个线程对相同资源的并发访问,是为了多个线程之间进行通信;而 ThreadLocal是隔离多个线程的数据共享,从根本上就不在多个线程之间共享资源,这样当然不需要多个线程进行同步了。
volatile
volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。
优势:这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
缘由:Java
语言规范中指出,为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原
始值对比。这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。而 volatile
关键字就是提示 VM:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。
使用技巧:在两个或者更多的线程访问的成员变量上使用 volatile。当要访问的变量已在 synchronized代码块中,或者为常量时,不必使用。
线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B。只在某些动作时才进行A和B的同步,因此存在A和B不一致
的情况。volatile就是用来避免这种情况的。
volatile告诉jvm,它所修饰的变量不保留拷贝,直接访问主内存中的(读操作多时使用较好;线程间需要通信,本条做不到)
Volatile变量具有 synchronized的可见性特性,但是不具备原子特性。这就是说线程能够自动发现 volatile
变量的最新值。Volatile
变量可用于提供线程安全,但是只能应用于非常有限的一组用例:多个变量之间或者某个变量的当前值与修改后值
之间没有约束。
您只能在有限的一些情形下使用 volatile变量替代锁。要使 volatile变量提供理想的线程安全,必须同时满足下面两个条件:
对变量的写操作不依赖于当前值;该变量没有包含在具有其他变量的不变式中。
sleep() vs wait()
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,把执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
(如果变量被声明为volatile,在每次访问时都会和主存一致;如果变量在同步方法或者同步块中被访问,当在方法或者块的入口处获得锁以及方法或者块退出时释放锁时变量被同步。)
BI主要掌握什么
商业智能也称作BI,是英文单词Business Intelligence的缩写。商业智能的概念最早在1996年提出。当时将商业智能定义为一类由数据仓库(或数据集市)、查询报表、数据分析、数据挖掘、数据备份和恢复等部分组成的、以帮助企业决策为目的技术及其应用。目前,商业智能通常被理解为将企业中现有的数据转化为知识,帮助企业做出明智的业务经营决策的工具。这里所谈的数据包括来自企业业务系统的订单、库存、交易账目、客户和供应商等来自企业所处行业和竞争对手的数据以及来自企业所处的其他外部环境中的各种数据。而商业智能能够辅助的业务经营决策既可以是操作层的,也可以是战术层和战略层的决策。为了将数据转化为知识,需要利用数据仓库、联机分析处理(OLAP)工具和数据挖掘等技术。因此,从技术层面上讲,商业智能不是什么新技术,它只是数据仓库、OLAP和数据挖掘等技术的综合运用。BI是一个工厂:
>> BI的原材料是海量的数据;
>> BI的产品是由数据加工而来的信息和知识;
>> BI将这些产品推送给企业决策者;
>>企业决策者利用 BI工厂的产品做出正确的决策,促进企业的发展;
这就是 Business Intelligence,即商业智能——连接数据与决策者,变数据为价值。
BI应用的两大类别是信息类应用和知识类应用,其特征如下表所示:
信息类 BI应用:
指由原始数据加工而来的数据查询、报表图表、多维分析、数据可视化等应用,这些应用的共同特点是:将数据转换为决策者可接受的信息,展现给决策者。
例如将银行交易数据加工为银行财务报表。
仅负责提供信息,而不会主动去分析数据。
例如,银行财务报表工具没有深入分析客户流失和银行利率之间关系的能力,而只能靠决策者结合信息,通过人的思考,得出知识。
知识类 BI应用:
指通过数据挖掘技术和工具,将数据中隐含的关系发掘出来,利用计算机直接将数据加工为知识,展现给决策者。
会主动去数据中探查数据关联关系,发掘那些决策者人脑无法迅速发掘的隐含知识,并将其以可理解的形式呈现在决策者面前。
(3) BI初级应用模式概览——数据查询(Querying)
数据查询是最简单的 BI应用,属于 MIS系统遗产,虽然出身比较老土,但是目前仍然是决策者获取信息的最直接的方法。
如今,数据查询界面已经彻底摆脱了传统 SQL命令行,大量的下拉菜单、输入框、列表框等元素甚至是鼠标拖拽界面将后台干苦力的 SQL语句包装成一个妖艳无比的数据获取系统,而本质仍然没有离开数据查询的几大要素:
>>查什么
>>从哪儿查
>>过滤条件
>>展示方法
目前国外比较流行的数据查询应用已经完全释放了数据查询的灵活性,如右图所示的是 Cognos ReportNet的数据查询界面 Query Studio,允许用户通过纯浏览器界面,以鼠标拖拽操作定义数据查询要素,并以报表和图表等多种方式展现数据。
(4) BI初级应用模式概览——报表(Reporting)
报表是国内最热衷的 BI应用之一,这与报表在我国企事业单位中的历史地位是分不开的。我国的报表以其格式诡异、数据集中、规则古怪等特征著称于世,曾经让无数国外报表工具和 BI工具捶胸顿足。
报表的两大要素是数据和格式,如果没有格式,则报表应用几乎等同于数据查询应用。可以说,报表就是将查询出来的数据按照指定的格式展现。
报表应用包含了报表展现和报表制作两大模块。报表展现就是让决策者看到报表,并允许决策者通过条件定义来选择报表数据,例如选择报表年度、部门、机构等等;报表制作面向报表的开发人员,其格式定义灵活性、数据映射灵活性、计算方法的丰富程度等均影响了 BI报表应用的质量。
需要澄清一下的是,Microsoft Excel不算是一个 BI报表工具,因为 Excel没有连接数据源的能力,充其量是一个 Spread Sheet。但是 Excel强大的格式功能让报表制作人员竟折腰,乃至到后来,几乎所有 BI厂商都提供了面向 Microsoft Excel的插件,通过插件,Excel可以连接到 BI的数据源上,摇身一变为 BI报表工具,丑小鸭变天鹅。
5) BI高级应用模式概览——在线分析(OnLine Analytical Processing,OLAP)
OLAP,即联机分析处理,是 BI带来的一种全新的数据观察方式,是 BI的核心技术之一。
我们知道,数据在数据库中是以数据表来存储的,比如某商店的销售数据存储在如下所示的一张数据表中:
销售时间
销售地点
产品
销售数量
销售金额
2004-11-1
北京
肥皂
10
342.00
2004-11-6
广州
桔子
30
123.00
2004-12-3
北京
香蕉
20
12.00
2004-12-13
上海
桔子
50
189.00
2005-1-8
北京
肥皂
10
342.00
2005-1-23
上海
牙刷
30
150.00
2005-2-4
广州
牙刷
20
100.00
决策者希望知道的往往是分布、占比、趋势之类的宏观信息,比如下列问题:
>>北京地区的销售数量虽时间的变化趋势?
>>哪种产品在 2005年销售比 2004年销售增幅最大?
>> 2004年各产品销售额的比例分布?……
面对这种需求,必须用 SQL语句进行大量的 SUM操作,每得出一个问题的结果,就需要 SQL SUM。面对上面的 7条记录,我们可以很容易的得出结果,但是当我们面对百万级甚至亿级的记录条数时,例如移动公司通话数据,每次 SQL SUM都需要消耗大量的时间来计算,决策者经常是在第一天提出分析需求,等到第二天才能拿到计算结果,这种分析方式是“脱机分析”,效率很低。
为了提高数据分析效率,OLAP技术彻底打破以记录为单位的数据浏览方式,而将数据分离为“维度(Dimension)”和“度量(Measure)”:
>>维度是观察数据的角度,例如上面示例中的“销售时间”、“销售地点”、“产品”;
>>度量是具体考察的数量值,例如上例中的“销售数量”和“销售金额”;
这样一来,我们就可以将上面这张平版的数据列表转换为一个拥有三个维度的数据立方体( Cube):
而探查数据的过程,就是在这个立方体中确定一个点,然后观察这个点的度量值:
当然,数据立方体并不局限于三个维度,这里采用三个维度来说明问题,只是因为通过图形可以表现出来的极限就是三个维度。
维度可以划分层次,例如时间上可以从日向上汇总为月和年,产品可以向上汇总为食品和日用品,地点可以向上汇总为华北和华南,用户可以沿着维度的层次任意向下钻取(Drill Down)和向上汇总(Roll Up):
通过这种方式,我们就可以摆脱 SQL SUM对速度的制约,快速定位符合不同条件的细节数据,更可以迅速得到某一层次的汇总数据。OLAP技术为决策者提供了多角度、多层次、高效率的数据探查方式,决策者的思维不再被固定的下拉菜单、查询条件所束缚,而是由决策者的思维带领数据的获取,任意组合分析角度和分析目标,这种打破传统的互动性分析和高效率使 OLAP成为 BI系统的核心应用。
(*)第四喷:BI高级应用模式——数据可视化与数据挖掘
(6) BI应用模式概览——数据可视化(Visualization)
数据可视化应用致力于将信息以尽可能多的形式展现出来,目的是使决策者通过图形这种直观的表现方式迅速获得信息中蕴藏的知识,如趋势、分布、密度等要素。值得一提的是,以 MapInfo公司为代表的 GIS软件商,目前也正在努力结合 BI应用。MapInfo率先提出了 Location Intelligence概念,依托于地理信息系统,展现各地区的属性值,例如人口密度,工业产值,人均医院数量等等,这种可视化应用部分与 BI数据可视化应用重合,并形成有力补充,有时可以在一个项目中互相搭配。
上图所示的是 Cognos Visualizer产品,这家伙用几近哗众取宠的丰富形式展现数据和信息,包含了地图、饼图、瀑布图等近五十种展现图形,并提供了二维和三维两种展现方式。所有的图形元素都是可活动的,例如用户可以通过点击地图上的某一个省,钻取到这个省各个城市的信息,这种可交互性是 BI与普通图片生成软件的显著差异。
(7) BI应用模式概览——数据挖掘(Data Mining)
数据挖掘是最高级的 BI应用,因为它能代替部分人脑功能。
数据挖掘隶属于知识发现(Knowledge Discovery)在结构化数据中的特例。
数据挖掘的目的是通过计算机对大量数据进行分析,找出数据之间潜藏的规律和知识,并以可理解的方式展现给用户。
数据挖掘的三大要素是:
>>技术和算法:目前常用的数据挖掘技术包括——
自动类别侦测(Auto Cluster Detection)
决策树(Decision Trees)
神经网络(Neural Networks)
>>数据:由于数据挖掘是一个在已知中挖掘未知的过程,
因此需要大量数据的积累作为数据源,数据积累
量越大,数据挖掘工具就会有更多的参考点。
>>预测模型:也就是将需要进行数据挖掘的业务逻辑由
计算机模拟出来,这也是数据挖掘的主要任务。
与信息类 BI应用相比,以数据挖掘为代表的知识类 BI应用目前还不成熟,但是从另一个角度来看,数据挖掘可发展的空间还很大,是今后 BI发展的重点方向,SAS,SPSS等知识类 BI应用厂商形象逐渐高大,悄悄占据了新的利润增长点。
上图中是著名的 IBM Intelligent Miner在分析客户的消费行为。它能对大量的客户数据进行分析,然后自动将客户划分为若干群体(自动类别侦测),并将每个群体的消费特征显示出来,这样决策者就能一目了然的针对不同客户的消费习惯,制定促销计划或广告计划。
上述功能如果单靠信息类 BI应用来实现,则需要决策者根据经验进行大量的 OLAP分析、数据查询工作,而且还不一定能发现数据中隐藏的规律。例如上述客户分类,对于一个拥有 400万用户的银行来说,如果没有数据挖掘工具,会把人活活累死的。
(8) BI底座——数据仓库技术(Data Warehouse)
在开始喷这个主题之前,让我们先看看数据仓库的官方定义:
数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策。以上是数据仓库的官方定义。
“操作型数据库”如银行里记账系统数据库,每一次业务操作(比如你存了5元钱),都会立刻记录到这个数据库中,长此以往,满肚子积累的都是零碎的数据,这种干脏活累活还不得闲的数据库就叫“操作型数据库”,面向的是业务操作。
“数据仓库”用于决策支持,面向分析型数据处理,不同于操作型数据库;另外,数据仓库是对多个异构的数据源有效集成,集成后按照主题进行了重组,并包含历史数据,而且存放在数据仓库中的数据一般不再修改。
操作型数据库、数据仓库与数据库之间的关系,就像 C:、D:与硬盘之间的关系一样,数据库是硬盘,操作型数据库是 C:,数据仓库是 D:,操作型数据库与数据仓库都存储在数据库里,只不过表结构的设计模式和用途不同。
那么为什么要在操作型数据库和 BI之间加这么一层“数据仓库”呢?
一是因为操作型数据库日夜奔忙,以快速响应业务为主要目标,根本没精力伺候 BI这边的数据需求,而且 BI这边的数据需求通常是汇总型的,一个 select sum(xx) group by xx就能让操作型数据库耗费大量资源,业务处理跟不上趟,麻烦就大了,比如你存了 5000元钱,发现十分钟后钱还没到账,作何感想?一定是该银行的领导在看饼图?
二是因为企业中一般存在有多个应用,对应着多个操作型数据库,比如人力资源库、财务库、销售单据库、库存货品库等等,BI为了提供全景的数据视图,就必须将这些分散的数据综合起来,例如为了实现一个融合销售和库存信息的 OLAP分析,BI工具必须能够高效的取得两个数据库中的数据,这时最高效的方法就是将数据先整合到数据仓库中,而 BI应用统一从数据仓库里取数。
将分散的操作型数据库中的数据整合到数据仓库中是一门大学问,催生了数据整合软件的市场。这种整合并不是简单的将表叠加在一起,而是必须提取出每个操作型数据库的维度,将共同的维度设定为共用维度,然后将包含具体度量值的数据库表按照主题统一成若干张大表(术语“事实表”,Fact Tables),按照维度-度量模型建立数据仓库表结构,然后进行数据抽取转换。后续的抽取一般是在操作性数据库负载比较小的时候(如凌晨),对新数据进行增量抽取,这样数据仓库中的数据就会形成积累。
大多数 BI应用并不要求获取实时的数据,比如决策者,只需要在每周一看到上周的周报就可以了,95%的 BI应用都不要求实时性,允许数据有 1小时至 1个月不等的滞后,这是决策支持系统的应用特点,这个滞后区间就是数据抽取工具工作的时间。当然,BI应用中通常还将包含极少的对实时数据的要求,这时仅需针对这些特殊需求,将 BI Querying软件直接连接在业务数据库上就可以了,但是必须限制负载,禁止做复杂查询。
目前的数据库产品都对数据仓库提供有专门优化,例如在安装 MySQL的高版本时,安装成序会询问你是想让数据库实例作为 Transaction-Oriented,还是 Decision Support,前者就是操作型数据库,后者就是数据仓库(决策支持么,再振臂高呼一遍),针对这两种形式,数据库将提供针对性的优化。
(9) BI花边
BI的相关知识大致就是这样了,写一些花边作为结束语吧。
BI要害:BI无法处理非结构化数据,只能处理数字信息,但是在企业中,还存在有大量像文本、流媒体、图片等非结构化的数据,这些数据同样蕴藏有大量价值,但是面对这些数据,目前的 BI工具无能为力。比较靠谱的是 IBM Intelligent Miner for Text,但是它在处理中文方面似乎十分薄弱。
BI厂商和产品:
首先让我们认识一下国外大人物!数据仓库方面,有 IBM DB2,Oracle,Sybase IQ,NCR Teradata等等;BI应用方面,有 Cognos,Business Objects,MicroStrategy,Hyperion,IBM等等;数据挖掘方面,有 IBM,SAS,SPSS等等。巨无霸 Microsoft也在 BI领域插了一腿,推出了 SQL Server Analysis Server、Reporting Services等 BI相关产品抢占山头!
我们往往容量只把眼光放在国外的BI大佬们而忽略国内渐渐突起的BI新军,如今国内比较出名的BI有奥威智动的Power-BI,尚南的BlueQuery及润乾报表等,特别值得一提的是奥威智动的Power-BI是一款标准化BI,在国内已经具有一定的市场占有率。
中国的 BI市场发展:
时间段
国内 BI应用情况
2002年以前
大量 BI软件被看作是能从多个数据源中抽取数据的报表工作,满眼全是报表。
一开始,公司的销售在推销产品时都向用户介绍:“我们是 BI领域最强的……”效果不好;后来那些销售终于找到了窍门,上来就说:“我们什么报表都能做!”然后订单不断。
2002-2003
OLAP的价值终于被某些慧眼发现,一些竞争压力大的企业为了提高竞争力,迫切需要从历史数据中挖掘价值,迅速发现了 OLAP的优势,这时销售终于不用再说“我们什么报表都能做”了。但是国家机关、垄断型企业,仍旧是报表,并且以为 BI就是报表。
2004
随着越来越多成功 BI项目的实施,OLAP终于得以见天日,这时国内才形成数据查询+报表展示+OLAP分析的合理 BI应用结构。一些数据可视化的需求也时常被用户提出,在一些竞争激烈、数据量大的企业,已经出现了数据挖掘应用。
2005
信息提供已经无法满足很多企业的要求,特别是银行、通信、证券等竞争激烈、风险密集的行业,大量涌现对数据挖掘的需求,BI应用终于形成信息+知识的整体。
BI工具在中国遇到的难题:
*复杂表样:中国是世界上报表最复杂的国家。中国的表样设计思想与西方不同,西方报表倾向于仅用一张报表说明一个问题,而中国的报表倾向于将尽可能多的问题集中在一张报表中,这种思路直接导致了中国报表的复杂格式和诡异风格。
*大数据量:中国是世界上人口最多的国家。以中国移动公司为例,仅我国一个省的用户数量,就相当于欧洲一个中等国家的人口,是真正的海量数据!国外数据库、数据仓库和 BI应用软件,都在中国经受着大数据量承载能力的考验。对于美国,可能一个客户分析应用两秒钟就能出结果,但是在中国这样的数据量下,可就不是两秒钟的问题了。
*数据回写:中国是世界上对 BI系统要求最奇特的国家。本来 BI系统是以忠实再现源数据为原则,但这个原则在中国遇到了难题,许多领导都提出了数据修改需求,“报表里数字不好看,就要能改啊,而且有时候也需要调整啊,这样上级领导看着就好嘛!”一个领导如是说。目前能满足此要求的 BI产品,仅有 Microsoft和 MicroStrategy两家。微软对中国市场算是吃透了。
AMD平台是什么意思
AMD是一家专注于微处理器设计和生产的跨国公司,总部位于美国加州硅谷内森尼韦尔。AMD为电脑、通信及消费电子市场供应各种集成电路产品,其中包括中央处理器、图形处理器、闪存、芯片组以及其他半导体技术。
公司概览创始人:杰瑞·桑德斯(Jerry Sanders)前任董事会主席:鲁毅智(Hector de J.Ruiz)现任董事会主席:迪克·梅耶(Dirk Meyer)大中华区总裁:郭可尊 AMD(Advanced Micro Devices)的英文缩写,超微半导体注释:Advanced为先进的,Micro为微小之意,英文直译为先进微半导体,但是AMD公司为自己的中文命名是超威半导体,所以也可称为超微半导体(这里使用的是官方说法)。AMD成立于1969年,总部位于加利福尼亚州桑尼维尔。 AMD公司专门为计算机、通信和消费电子行业设计和制造各种创新的微处理器、闪存和低功率处理器解决方案。AMD致力为技术用户——从企业、政府机构到个人消费者——提供基于标准的、以客户为中心的解决方案。其在CPU市场上的占有率仅次于Intel。 AMD在全球各地设有业务机构,在美国、中国、德国、日本、马来西亚、新加坡和泰国设有制造工厂,并在全球各大主要城市设有销售办事处,拥有超过 1.6万名员工。 2009年, AMD的销售额是54亿美元。 AMD有超过 70%的收入都来自于国际市场,是一家真正意义上的跨国公司。公司在美国纽约股票交易所上市,代号为 AMD。
[编辑本段]业务发展
在 AMD,坚持“客户为本推动创新”的理念,这是指导 AMD所有业务运作的核心准则。 AMD与客户建立了成功的合作关系,以便更加深入地了解他们的需求;AMD与技术领袖开展了密切的合作,以开发下一代解决方案,拓展全球市场和推广 AMD的品牌;我们还与一些以克服艰巨困难并依靠技术获得成功的世界级领先者建立了合作关系。迄今为止,全球已经有超过 2,000家软硬件开发商、 OEM厂商和分销商宣布支持AMD64位技术。在福布斯全球 2000强中排名前 100位的公司中,75%以上在使用基于 AMD皓龙(TM)处理器的系统运行企业应用,且性能获得大幅提高。
[编辑本段]产品系列
计算产品
对于需要高性能计算和 IT基础设施的企业用户来说, AMD提供一系列解决方案。 o 1981年,AMD 287 FPU,使用Intel 80287核心。产品的市场定位和性能与Intel 80287基本相同。也是迄今为止AMD公司唯一生产过的FPU产品,十分稀有。 o AMD 8080(1974年)、8085(1976年)、8086(1978年)、8088(1979年)、80186(1982年)、80188、80286微处理器,使用Intel 8080核心。产品的市场定位和性能与Intel同名产品基本相同。 o AMD 386(1991年)微处理器,核心代号P9,有SX和DX之分,分别与Intel 80386SX和DX相兼容的微处理器。AMD 386DX与Intel 386DX同为32位处理器。不同的是AMD 386SX是一个完全的16位处理器,而Intel 386SX是一种准32位处理器----内部总线32位,外部16位。AMD 386DX的性能与Intel 80386DX相差无己,同为当时的主流产品之一。AMD也曾研发了386 DE等多种型号基于386核心的嵌入式产品。 o AMD 486DX(1993年)微处理器,核心代号P4,AMD自行设计生产的第一代486产品。而后陆续推出了其他486级别的产品,常见的型号有:486DX2,核心代号P24;486DX4,核心代号P24C;486SX2,核心代号P23等。其它衍生型号还有486DE、486DXL2等,比较少见。AMD 486的最高频率为120MHz(DX4-120),这是第一次在频率上超越了强大的竞争对手Intel。 o AMD 5X86(1995年)微处理器,核心代号X5,AMD公司在486市场的利器。486时代的后期,TI(德州仪器)推出了高性价比的TI486DX2-80,很快占领了中低端市场,Intel也推出了高端的Pentium系列。AMD为了抢占市场的空缺,便推出了5x86系列CPU(几乎是与Cyrix 5x86同时推出)。它是486级最高频的产品----33*4、133MHz,0.35微米制造工艺,内置16KB一级回写缓存,性能直指Pentium75,并且功耗要小于Pentium。 o AMD K5(1997年)微处理器,1997年发布。因为研发问题,其上市时间比竞争对手Intel的"经典奔腾"晚了许多,再加上性能并不十分出色,这个不成功的产品一度使得AMD的市场份额大量丧失。K5的性能非常一般,整数运算能力比不上Cyrix x86,但比"经典奔腾"略强;浮点预算能力远远比不上"经典奔腾",但稍强于Cyrix 6x86。综合来看,K5属于实力比较平均的产品,而上市之初的低廉的价格比其性能更加吸引消费者。另外,最高端的K5-RP200产量很小(惯例吧:)并且没有在中国大陆销售。 o AMD K6(1997年)处理器是与Intel PentiumMMX同档次的产品。是AMD在收购了NexGen,融入当时先进的NexGen 686技术之后的力作。它同样包含了MMX指令集以及比Pentium MMX整整大出一倍的64KB的L1缓存!整体比较而言,K6是一款成功的作品,只是在性能方面,浮点运算能力依旧低于Pentium MMX。 o K6-2(1998年)系列微处理器曾经是AMD的拳头产品,现在我们称之为经典。为了打败竞争对手Intel,AMD K6-2系列微处理器在K6的基础上做了大幅度的改进,其中最主要的是加入了对"3DNow!"指令的支持。"3DNow!"指令是对X86体系的重大突破,此项技术带给我们的好处是大大加强了计算机的3D处理能力,带给我们真正优秀的3D表现。当你使用专门"3DNow!"优化的软件时就能发现,K6-2的潜力是多么的巨大。而且大多数K6-2并没有锁频,加上0.25微米制造工艺带给我们的低发热量,能很轻松的超频使用。也就是从K6-2开始,超频不再是Intel的专有名词。同时,.K62也继承了AMD一贯的传统,同频型号比Intel产品价格要低25%左右,市场销量惊人。K6-2系列上市之初使用的是"K6 3D"这个名字("3D"即"3DNow!"),待到正式上市才正名为"K6-2"。正因为如此,大多数K6 3D为ES(少量正式版,毕竟没有量产:)。K6 3D曾经有一款非标准的250MHz产品,但是在正式的K6-2系列中并没有出现。K6-2的最低频率为200MHz,最高达到550MHz。 o AMD于1999年2月推出了代号为"Sharptooth"(利齿)的K6-3(1998年)系列微处理器,它是AMD推出的最后一款支持Super架构和CPGA封装形式的CPU。K6-3采用了0.25微米制造工艺,集成256KB二级缓存(竞争对手Intel的新赛扬是128KB),并以CPU的主频速度运行。而曾经Socket 7主板上的L2此时就被K6-3自动识别为了L3,这对于高频率的CPU来说无疑很有优势,虽然K6-3的浮点运算依旧差强人意。因为各种原因,K6-3投放市场之后难觅踪迹,价格也并非平易近人,即便是更加先进的K6-3+出现之后。 oAMD于2001年10月推出了K8架构。尽管K8和K7采用了一样数目的浮点调度程序窗口(scheduling window),但是整数单元从K7的18个扩充到了24个,此外,AMD将K7中的分支预测单元做了改进。global history counter buffer(用于记录CPU在某段时间内对数据的访问,称之为全历史计数缓冲器)比起Athlon来足足大了4倍,并在分支测错前流水线中可以容纳更多指令数,AMD在整数调度程序上的改进让K8的管线深度比Athlon多出2级。增加两级线管深度的目的在于提升K8的核心频率。在K8中,AMD增加了后备式转换缓冲,这是为了应对Opteron在服务器应用中的超大内存需求。 oAMD于2007下半年推出K10架构。采用K10架构的 Barcelona为四核并有4.63亿晶体管。Barcelona是AMD第一款四核处理器,原生架构基于65nm工艺技术。和Intel Kentsfield四核不同的是,Barcelona并不是将两个双核封装在一起,而是真正的单芯片四核心。● Barcelona新特性解析:引入全新SSE128技术 Barcelona中的一项重要改进是被AMD称为“SSE128”的技术,在K8架构中,处理器可以并行处理两个SSE指令,但是SSE执行单元一般只有64位带宽。对于128位的SSE操作,K8处理器需要将其作为两个64位指令对待。也就是说,当一个128位 SSE指令被取出后,首先需要将其解码为两个micro-ops,因此一个单指令还占用了额外的解码端口,降低了执行效率。而Barcelona加宽了执行单元从64位到128位,所有128位的SSE操作不再需要进行解码分解为两个64位操作,并且浮点调度器也可以支持这种128位 SSE操作,提高了执行效率。提高SSE指令执行单元带宽的同时,也会带来一些新的变化,也可以说是新的瓶颈:指令存取带宽。为了将并行处理器过程中解码数量最大化,Barcelona开始支持32字节每时钟周期的指令存取,而先前K8架构只支持16字节。32字节的指令存取带宽不仅对处理器SSE代码有帮助,同时对于整数指令也有效果。● Barcelona新特性解析:内存控制器再度强化当年当AMD将内存控制器集成至CPU内部时,我们看到了崭新而强大的K8构架。如今,Barcelona的内存控制器在设计上将又一次极大的改进其内存性能。 Intel Xeon服务器所有使用的FB-DIMM内存一大优势是,可以同时执行读和写命令到AMB,而在标准的DDR2内存中,你只能同时进行一个操作,而且读和写的切换会有非常大的损失。如果是一连串的随机混合执行的话,将会带来非常严重的资源浪费,而如果是先全部读然后再转换到写的话,就可以避免性能的损失。K8内存控制器就采用读取优先于写的策略来提高运行效率,但是Barcelona则更加智能化。但是读取的数据会被先存放在buffer中,而不采用先直接执行写,但当它的容量达到了极限就会溢出,为了避免这种情况,在此之前才对读写之间进行切换,同时可以带来带宽和延迟方面效率的提高。K8核心配备的是128-bits宽度的单内存控制器,但是在Barcelona中,AMD把它分割成两个64-bit,每个控制器可以独立的进行操作,因此它可以带来效率上的不小提升,尤其是在四核执行的环境下,每个核心可以独立占有内存访问资源。 Barcelonas中集成的北桥部分(注意不是主板北桥)也被设计成更高的带宽,更深的buffers将允许更高的带宽利用率,同时北桥自身已经可以使用未来的内存技术,比如DDR3。内存控制器的预取功能是运用相当广泛、十分重要的一项功能。预取可以减少内存延迟对整体性能的负面影响。当NVIDIA发布nForce2主板时,重点介绍的就是nForce2芯片组的128位智能预取功能。Intel在发布Core 2处理器之时也强调了CORE构架每核心拥有三个预取单元。 K8构架中每个核心设计有2个预取器,一个是指令预取器,另一个是数据预取器。K8L构架的Barcelona保持了2个的数量,但在性能上有了较大的改进。一个明显的改进是数据预取器直接将数据寄存入L1缓存中,相比K8构架中寄存入L2缓存的做法,新的数据预取器准确率更高,速度更快,内存性能及CPU整体性能将得益于此。● Barcelona新特性解析:创新——三级缓存受工艺技术方面的影响,AMD处理器的缓存容量一直都要落后于Intel,AMD自己也清楚自己无法在宝贵的die上加入更多的晶体管来实现大容量的缓存,但是勇于创新的AMD却找到了更好的办法——集成内存控制器。处理器整合内存控制器可以说是一项杰作,拥有整合内存控制器的K8构架仅依靠512KB的L2缓存就能够击败当时的对手Pentium 4。直到现在的Athlon 64 X2也依然保持着Intel 2002年就已过时的512KB L2缓存。现在Core 2已经拥有了4MB的L2缓存,看来Intel和AMD之间的缓存差距还将保持,因为Barcelona的L2缓存依然是512KB。相比之下,Intel四核的Kentsfield芯片拥有8MB的L2缓存,而2007年末上市的新型Penryn芯片将拥有12MB的L2缓存。 Barcelona的缓存体系和K8构架有一定的相似之处,它的四颗核心各拥有64KB的L1缓存和512KB的L2缓存。从简化芯片设计的角度来看,四核心共享巨大的L2缓存对K8L构架而言并不合适,所以AMD引入了L3缓存,得益于65nm工艺,Barcelona在一颗晶圆上集成四颗核心外,还集成了一块2MB容量的L3缓存。也就是说L3缓存与4颗内核同样原生于一块晶圆,其容量为最小2M起跳。同L2缓存一样,L3缓存也是独立的,L1缓存的数据和L3缓存的数据将不会重复。 Barcelona的缓存工作原理是:L2缓存是作为L1缓存的备用空间。L1缓存储存着CPU当前最需要的数据,而当空间不足时,一些不是最重要的数据就转移到L2缓存中。而当未来再次需要时,则从L2缓存中再次转移到L1缓存中。新加入的L3缓存延续了L2缓存的角色,四颗核心的L2缓存将溢出的数据暂时寄存在L3缓存中。 L1缓存和L2缓存依然分别是2路和16路,L3缓存则是32路。快速的32路L3缓存不仅可以更好的满足多任务并行,而且对单任务的执行也有着较大积极作用。尤其在3D运用方面,2MB的L3缓存将对性能产生极大的推进作用。 AMD全新45nm的Shanghai架构 2008年11月13日,AMD公司宣布其代号为“上海”的新一代45nm四核皓龙处理器已经广泛上市。“上海”性能最高提升达35%,而空载时的功耗可显著降低35%。新一代四核AMD皓龙处理器采用创新的设计,能够带来更高的虚拟化性能和每瓦性价比,帮助数据中心提高效率,降低复杂性,从而最大限度地满足IT管理者的需要,以更低的投入实现更高的产出。 AMD公司负责计算解决方案业务的高级副总裁Randy Allen表示:“新一代四核AMD皓龙处理器是在正确的时间诞生的一款正确的产品。堪称完美的提前推出,使之成为x86服务器性能的新王者。通过与OEM厂商和解决方案供应商等合作伙伴的紧密合作,AMD的创新技术在满足企业用户目前最基本需求的同时,还为其未来发展做好准备。自4年前AMD推出世界首款x86双核处理器以来,这一增强的新一代皓龙处理器带来了AMD产品性能和每瓦性价比的最大提升。”领先的性能满足当今最迫切的商务需求数据中心的管理者们面对日益增长的压力,诸如网络服务、数据库应用等的企业工作负载对计算的需求越来越高;而在当前的IT支出环境下,还要以更低的投入实现更高的产出。迅速增长的新计算技术如云计算和虚拟化等,在今年第二季度实现了60%的同比增长率3,这些技术在迅速应用的同时也迫切需要一个均衡的系统解决方案。最新的四核AMD皓龙处理器进一步增强了AMD独有的直连架构优势,能够为包括云计算和虚拟化在内的日渐扩大的异构计算环境提供具有出色稳定性和扩展性的解决方案。卓越的虚拟化性能具有改进的AMD直连架构和AMD虚拟化技术(AMD-V(TM)),45nm四核皓龙处理器成为已有的基于AMD技术的虚拟化平台的不二选择,目前全球的OEM厂商已基于上一代AMD四核皓龙处理器推出了9款专门为虚拟化应用而设计的服务器。新一代处理器可提供更快的虚拟机转换时间,并优化快速虚拟化索引技术(RVI)的特性,从而提高虚拟机的效率,AMD的AMD-V(TM)还可以减少软件虚拟化的开销。无与伦比的性价比与历代的AMD皓龙处理器相比,新一代四核皓龙处理器带来了前所未有的性能和每瓦性能比显著增强,包括: o以与上代四核皓龙处理器相同的功耗设计,大幅提高CPU时钟频率。这得益于处理器设计增强、AMD业界领先的45nm沉浸式光刻技术和超强的处理器设计与验证能力。 o L3缓存容量提高200%,达到6MB,增强虚拟化、数据库和Java等内存密集型应用的性能。 o支持DDR2-800内存,与现有AMD皓龙处理器相比内存带宽实现了大幅提高,并且比竞品使用的Fully-Buffered DIMM具有更高的能效。 o即将推出的超传输总线(TM)3.0(HyperTransport(TM) 3.0)技术将进一步增强AMD革命性的直连架构,计划于2009年2季度将处理器之间的通信带宽提高到17.6GB/s。无可匹敌的节能特性 AMD皓龙处理器业已带来了业界领先的X86服务器处理器每瓦性价比,与之相比,新一代45nm四核AMD皓龙处理器在空载状态的能耗可以大幅降低35%,而性能可提高达35%。“上海”采用了众多的新型节能技术:AMD智能预取技术,可允许处理器核心在空载时进入“暂停”状态,而不会对应用性能和缓存中的数据有任何影响,从而显著降低能耗;AMD CoolCore(TM)技术能够关闭处理器中非工作区域以进一步节省能耗。在平台配置相似的情况下,基于75瓦AMD四核皓龙处理器的平台,与基于50瓦处理器的竞争平台相比,具有高达30%的每瓦性能比优势。相似平台配置下,基于AMD四核皓龙处理器2380的平台,空载状态的功耗为138瓦;与之对比,基于英特尔四核处理器的平台在相同状态下的功耗则为179瓦。基于AMD四核皓龙2380型号处理器的平台,在SPECpower_ssj(TM)2008基准测试中取得761ssj_ops/每瓦的总成绩(308,089 ssj_ops@ 100%的目标负载),而英特尔四核平台为总成绩为561ssj_ops/每瓦(267,804 ssj_ops@ 100%的目标负载). 4前所未有的平台稳定性作为唯一用相同的架构提供2路到8路服务器处理器的x86微处理器制造商,AMD新一代45nm四核皓龙处理器在插槽和散热设计与上代四核和双核AMD皓龙处理器兼容,延续了AMD的领先地位。这可以帮助消费者减少平台管理的复杂性和费用,增强数据中心的正常运行时间和生产力。新的45nm处理器适用于现有的Socket 1207插槽架构,未来代号为“Istanbul”的AMD下一代皓龙处理器也计划使用相同插槽。全球OEM厂商支持作为业内最易于管理和一致的x86服务器平台,由于采用AMD皓龙处理器,至少是部分原因,全球OEM和系统开发商能够迅速完成验证流程,并预计从本月起开始交付基于增强的四核AMD皓龙处理器的下一代系统。本季度和2009年第一季度,基于增强的四核AMD皓龙处理器的系统的供应量有望迅速增长。惠普工业标准服务器业务部营销副总裁Paul Gottsegen表示:“通过采用基于新‘上海’处理器的 HP ProLiant服务器,客户可以降低成本,同时使能效和性能更上层楼。在与AMD公司过去的4年合作中,我们为各种规模的客户提供了基于AMD皓龙处理器的平台,并取得了空前的成功。初期反馈结果表明‘上海’将成为赢者。” Sun公司系统业务部执行副总裁John Fowler表示:“ Sun的创新系统设计和Solaris与增强型四核AMD皓龙处理器相结合,将为虚拟化应用和系统整合带来具有难以置信的强大性能、可扩展性和高能效特性的x64平台。在数据中心增长过程中,基于AMD增强型四核皓龙处理器的Sun服务器能够处理最复杂的数据群并灵活扩展。而由于历代平台之间的连续性,客户有信心确保新系统与已部署的AMD皓龙系统实现无缝兼容。”戴尔商用产品部高级副总裁Brad Anderson表示:“戴尔和AMD公司共同致力于为企业提供强大的全系列产品,以简化IT环境管理并降低管理成本。我们的PowerEdge服务器专门设计以充分利用AMD芯片中集成的虚拟化特性。这种紧密协作效果显著,2路和4路机架和刀片式PowerEdge服务器已经取得了破纪录的虚拟化性能。” IBM刀片式服务器副总裁Alex Yost表示:“自2003年以来,IBM就利用AMD皓龙处理器的性能和直连架构满足企业用户计算密集型的需求,并为其带来更多选择。IBM正在AMD新处理器高能效和虚拟化的基础上进一步创新,为我们的客户带来更高的价值。” o采用直连架构的 AMD皓龙(Opteron)(TM)处理器可以提供领先的多技术。使IT管理员能够在同一服务器上运行32位与64位应用软件,前提是该服务器使用的是64位操作系统。 o AMD速龙(Athlon64),又叫阿斯龙(TM) 64处理器可以为企业的台式电脑用户提供卓越的性能和重要的投资保护,具有出色的功能和性能,可以提供栩栩如生的数字媒体效果――包括音乐、视频、照片和 DVD等。 o AMD双核速龙(TM) 64(AthlonX2 64)处理器可以提供更AMD双核速龙64处理器架构高的多任务性能,帮助企业在更短的时间内完成更多的任务(包括业务应用和视频、照片编辑,内容创建和音频制作等)。这些强大的功能使其成为那些即将上市的新型媒体中心的最佳选择。 o AMD炫龙(TM) 64(Turion64)移动计算技术可以利用移动计算领域的最新成果,提供最高的移动办公能力,以及领先的 64位计算技术。 o AMD闪龙(TM)(Sempron64)处理器不仅可以为企业提供出色的性价比,而且可以提高员工的日常工作效率。 o AMD羿龙(TM)(phenom)处理器全新架构的4核处理器,进一步满足用户需求(在命名中取消“64”,因为现今的CPU都是64位的,不必再标明)。为满足消费者的不同需求,AMD近期也推出了3核羿龙产品!对于消费者, AMD也提供全系列 64位产品。 o AMD雷鸟(TM)(Thunderbird)处理器 o AMD钻龙(TM)(Duron)处理器可以说是雷鸟的精简便宜版,架构和雷鸟处理器一样,其差别除了时脉较低之外,就是内建的L2 Cache,只有64K。
嵌入式解决方案
AMD的嵌入式解决方案以个人电脑以外的上网设备为目标市场,锁定的目标产品包括平板电脑、汽车导航及娱乐系统、家庭与小型办公室网络产品以及通信设备。AMD Geode(TM)解决方案系列不仅包括基于x86的嵌入式处理器,还包括多种系统解决方案。AMD的一系列 Alchemy(TM)解决方案有低功率、高性能的 MIPS(TM)处理器、无线技术、开发电路板及参考设计套件。随着这些新的解决方案相继推出,AMD的产品将会更加多元化,有助确立 AMD在新一代产品市场上的领导地位。
自1969年推出产出第一个优良芯片--Am9300开始,创新推动着AMD不断向前。2003年,AMD首开先河推出了高性能和无缝移植32位,拥有强大的64位计算优势的AMD64技术;在合作伙伴的支持下,AMD率先在中国个人电脑市场推出64位计算。2005年,AMD再开行业之先河,推出了基于直联架构的双核心处理器。进入2007年,AMD的创新劲头更加势不可挡。3月,首款AMD 690系列芯片组出炉;第二季度,AMD全线采用65纳米制造工艺;6月,AMD通过ATI Radeon HD 2000系列图形显示芯片,进一步确立了整合开放平台技术的领先优势。同年,AMD推出业界首款真四核产品--四核皓龙处理器"巴塞罗那",并发布真四核台式羿龙处理器和Spider(蜘蛛)全新高端平台,再次引领真四核计算的新纪元。 2008年,AMD先后推出数十款处理器产品和平台解决方案,稳立行业创新浪尖。6月,AMD发布全新移动平台PUMA,通过AMD移动处理器, AMD 780G高端芯片组和ATI Radeon图形显示芯片的结合,以完美的三维和高清性能表现,打造了极致视觉体验。7月,AMD同曙光再次联手,推出了基于AMD四核皓龙处理器的中国首款超百万亿次超级计算机曙光5000A,并跻身全球超级计算机排行榜前十。而羿龙三核/四核台式处理器的推出更是赢得了零售市场和OEM合作伙伴的广泛欢迎。同年年末,AMD更是推出了业界领先的45nm四核皓龙处理器"上海",引领整个行业走入一个全新的计算时代。 AMD多年来一直致力投资开发未来一代的先进技术。2009年伊始,在台式机方面,AMD便推出了下一代45nm四核处理器Phenom II处理器与高端"Dragon"3A平台;在移动平台方面,AMD推出了超便携平台Yukon,还计划推出Congo,此外将陆续推出下一代主流移动平台"Tigris",六核服务器处理器""Istanbul"和第一个AMD服务器平台"Fiorano";而在图形显示方面,AMD也将向DirectX 11迁移。目前 AMD已着手开发未来 5至 10年都可适用的高性能技术。在全新的Fusion品牌理念的指导下,AMD将通过展现芯片级融合概念的创新技术,加强与客户及合作伙伴密切合作,向全球用户提供无与伦比的体验和差异化服务,从而使整个行业呈现全新面貌。
关于java什么叫回写,java多线程开发的同步机制有哪些的介绍到此结束,希望对大家有所帮助。