海妖 发表于 2015-1-18 11:09:56

了解下JAVA的java线程简介 -共享对数据的会见

你精通任何一门语言就最强大。现在来看,java的市场比C#大,C#容易入手,比较简单,java比较难
共享变量
要使多个线程在一个程序中有效,它们必需有某种办法能够相互通讯或共享它们的了局。
让线程共享其了局的最复杂办法是利用共享变量。它们还应当利用同步来确保值从一个线程准确传布到另外一个线程,和避免当一个线程正在更新一些相干数据项时,另外一个线程看到纷歧致的两头了局。
线程基本上钩算素数的示例利用了一个共享布尔变量,用于暗示指定的工夫段已已往了。这申明了在线程间共享数据最复杂的情势是:轮询共享变量以检察另外一个线程是不是已完成实行某项义务。
存在于统一个内存空间中的一切线程
正如后面会商过的,线程与历程有很多配合点,分歧的是线程与统一历程中的别的线程共享不异的历程高低文,包含内存。这十分便当,但也有严重义务。只需会见共享变量(静态或实例字段),线程就能够便利地相互互换数据,但线程还必需确保它们以受控的体例会见共享变量,以避免它们相互搅扰对方的变动。
任何线程能够会见一切其感化域内的变量,就象主线程能够会见该变量一样。素数示例利用了一个公用实例字段,叫做finished,用于暗示已过了指定的工夫。当计时器过时时,一个线程会写这个字段;另外一个线程会按期读取这个字段,以反省它是不是应当中断。注:这个字段被声明成volatile,这关于这个程序的准确运转十分主要。在本章的前面,我们将看到缘故原由。
受控会见的同步
为了确保能够在线程之间以受控体例共享数据,Java言语供应了两个关头字:synchronized和volatile。
Synchronized有两个主要寄义:它确保了一次只要一个线程能够实行代码的受回护部分(互斥,mutualexclusion大概说mutex),并且它确保了一个线程变动的数据关于别的线程是可见的(变动的可见性)。
假如没有同步,数据很简单就处于纷歧致形态。比方,假如一个线程正在更新两个相干值(好比,粒子的地位和速度),而另外一个线程正在读取这两个值,有大概在第一个线程只写了一个值,还没有写另外一个值的时分,调剂第二个线程运转,如许它就会看到一个旧值和一个新值。同步让我们能够界说必需原子地运转的代码块,如许关于其他线程而言,它们要末都实行,要末都不实行。
同步的原子实行或互斥方面相似于别的操纵情况中的临界段的观点。
确保共享数据变动的可见性
同步可让我们确保线程看到分歧的内存视图。
处置器可使用高速缓存减速对内存的会见(大概编译器能够将值存储到存放器中以便举行更快的会见)。在一些多处置器系统布局上,假如在一个处置器的高速缓存中修正了内存地位,没有需要让别的处置器看到这一修正,直到革新了写进器的高速缓存而且使读取器的高速缓存有效。
这暗示在如许的体系上,关于统一变量,在两个分歧处置器上实行的两个线程大概会看到两个分歧的值!这听起来很吓人,但它却很罕见。它只是暗示在会见别的线程利用或修正的数据时,必需遵守某些划定规矩。
Volatile比同步更复杂,只合适于把持对基础变量(整数、布尔变量等)的单个实例的会见。当一个变量被声明成volatile,任何对该变量的写操纵城市绕太高速缓存,间接写进主内存,而任何对该变量的读取也都绕太高速缓存,间接取自立内存。这暗示一切线程在任什么时候候看到的volatile变量值都不异。
假如没有准确的同步,线程大概会看到旧的变量值,大概引发别的情势的数据破坏。
用锁回护的原子代码块
Volatile关于确保每一个线程看到最新的变量值十分有效,但偶然我们必要回护对照年夜的代码片断,如触及更新多个变量的片断。
同步利用监控器(monitor)或锁的观点,以和谐对特定代码块的会见。
每一个Java对象都有一个相干的锁。统一工夫只能有一个线程持有Java锁。当线程进进synchronized代码块时,线程会堵塞并守候,直到锁可用,当它可用时,就会取得这个锁,然后实行代码块。当把持加入受回护的代码块时,即抵达了代码块开端大概抛出了没有在synchronized块中捕捉的非常时,它就会开释该锁。
如许,每次只要一个线程能够实行受给定监控器回护的代码块。从别的线程的角度看,该代码块能够看做是原子的,它要末全体实行,要末基本不实行。
<p>
C#跟java类似,但是在跨平台方面理论上可以跨平台,实际上应用不大,执行性能优于java,跟C++基本一致,但是启动速度还是慢.代码安全,但容易性能陷阱.

小魔女 发表于 2015-1-20 15:38:51

接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。

因胸联盟 发表于 2015-1-20 19:11:49

另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。

第二个灵魂 发表于 2015-1-29 15:45:14

关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。

老尸 发表于 2015-1-31 05:48:43

另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。

蒙在股里 发表于 2015-2-2 21:42:23

关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。

admin 发表于 2015-2-2 21:47:09

有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)

金色的骷髅 发表于 2015-2-5 03:34:37

我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。

不帅 发表于 2015-2-5 20:58:56

还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。

再现理想 发表于 2015-2-6 00:50:05

另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。

乐观 发表于 2015-2-10 13:40:22

一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。

简单生活 发表于 2015-3-1 10:58:58

象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。

变相怪杰 发表于 2015-3-10 14:59:03

是一种语言,用以产生「小应用程序(Applet(s))

飘灵儿 发表于 2015-3-17 08:09:25

是一种使用者不需花费很多时间学习的语言

爱飞 发表于 2015-3-24 02:53:50

是一种将安全性(Security)列为第一优先考虑的语言
页: [1]
查看完整版本: 了解下JAVA的java线程简介 -共享对数据的会见