多线程的Java

 我来答
艾丝蒂尔381
2016-05-11
知道答主
回答量:70
采纳率:100%
帮助的人:10.1万
展开全部

Java对多线程的支持是非常强大的,他屏蔽掉了许多的技术细节,让我们可以轻松的开发多线程的应用程序。
Java里面实现多线程,有2个方法
继承 Thread类 classMyThreadextendsThread{publicvoidrun(){//这里写上线程的内容}publicstaticvoidmain(String[]args){//使用这个方法启动一个线程(newMyThread()).start();}}实现 Runnable接口 classMyThreadimplementsRunnable{publicvoidrun(){//这里写上线程的内容}publicstaticvoidmain(String[]args){//使用这个方法启动一个线程(newThread(newMyThread())).start();}}一般鼓励使用第二种方法,因为Java里面只允许单一继承,但允许实现多个接口。第二个方法更加灵活。
C++ 11
ISO C++ 11 标准在STL中提供了std::thread类,因此多线程变得非常容易。 #include<thread>usingnamespacestd;voidthreadFunc(){//这里写上线程的内容}intmain(){threadt(threadFunc);//启动线程t.join();//等待线程运行完毕return0;}一个采用了多线程技术的应用程序可以更好地利用系统资源。其主要优势在于充分利用了CPU的空闲时间片,可以用尽可能少的时间来对用户的要求做出响应,使得进程的整体运行效率得到较大提高,同时增强了应用程序的灵活性。更为重要的是,由于同一进程的所有线程是共享同一内存,所以不需要特殊的数据传送机制,不需要建立共享存储区或共享文件,从而使得不同任务之间的协调操作与运行、数据的交互、资源的分配等问题更加易于解决。
线程同步
在多线程应用中,考虑不同线程之间的数据同步和防止死锁。当两个或多个线程之间同时等待对方释放资源的时候就会形成线程之间的死锁。为了防止死锁的发生,需要通过同步来实现线程安全。在Visual Basic中提供了三种方法来完成线程的同步。在Java中可用synchronized关键字。
代码域同步
使用Monitor类可以同步静态/实例化的方法的全部代码或者部分代码段。
手工同步
可以使用不同的同步类(诸如WaitHandle, Mutex, ReaderWriterLock, ManualResetEvent, AutoResetEvent 和Interlocked等)创建自己的同步机制。这种同步方式要求你自己手动的为不同的域和方法同步,这种同步方式也可以用于进程间的同步和解除由于对共享资源的等待而造成的死锁。
上下文同步
使用SynchronizationAttribute为ContextBoundObject对象创建简单的,自动的同步。这种同步方式仅用于实例化的方法和域的同步。所有在同一个上下文域的对象共享同一个锁。
虽然多线程能给大家带来好处,但是也有不少问题需要解决。例如,对于像磁盘驱动器这样独占性系统资源,由于线程可以执行进程的任何代码段,且线程的运行是由系统调度自动完成的,具有一定的不确定性,因此就有可能出现两个线程同时对磁盘驱动器进行操作,从而出现操作错误;又例如,对于银行系统的计算机来说,可能使用一个线程来更新其用户数据库,而用另外一个线程来读取数据库以响应储户的需要,极有可能读数据库的线程读取的是未完全更新的数据库,因为可能在读的时候只有一部分数据被更新过。使隶属于同一进程的各线程协调一致地工作称为线程的同步。下面我们只介绍最常用的四种线程同步方式:
临界区(critical section)
事件(event)
互斥量(mutex)
信号量(semaphore)
通过这些类,可以比较容易地做到线程同步。
HT定义
超线程(HT)是英特尔所研发的一种技术,于2002年发布。超线程的英文是HT技术,全名为Hyper-Threading,中文又名超线程。超线程技术原先只应用于Xeon处理器中,当时称为Super-Threading。之后陆续应用在Pentium 4中,将技术主流化。早期代号为Jackson。
特点
通过此技术,英特尔成为第一间公司实现在一个实体处理器中,提供两个逻辑线程。之后的Pentium D纵使不支援超线程技术,但就集成了两个实体核心,所以仍会见到两个逻辑线程。超线程的未来发展,是提升处理器的逻辑线程,英特尔有计划将8核心的处理器,加以配合超线程技术,使之成为16个逻辑线程的产品。
英特尔表示,超线程技术让(P4)处理器增加5%的裸晶面积,就可以换来15%~30%的效能提升。但实际上,在某些程式或未对多执行绪编译的程式而言,超线程反而会降低效能。除此之外,超线程技术亦要操作系统的配合,普通支援多处理器技术的系统亦未必能充分发挥该技术。例如Windows 2000,英特尔并不鼓励使用者在此系统中利用超线程。原先不支援多核心的Windows XPHome Edition却支援超线程技术。
AMDBulldozer“推土机”
据相关消息透露,在HotChips会议上,AMD宣布下一代代号为Bulldozer“推土机”的处理器架构将采用单核多线程技术(multi-threadingtechnology),类似于Intel著名的超线程技术.
AMD没有透露有关其多线程能力和更多的细节,只说推土机处理器将在2011年推出,支持单核多线程技术.不过,AMD的做法和Intel的 HT是不同的,更类似于Sun的同步多线程技术(SimultaneousMulti-Threading),由1个物理核心扩展到4个线程.“推土机扩展出的单核心多线程技术和Intel的超线程采用的是不同方式.”AMD的代表PatConway也证实了这一点. 有趣的是,早些时候AMD还表示暂不考虑SMT或其他多线程技术,并将它应用在当下的处理器中.然而,AMD也认同步多线程是未来处理器产品大幅提升性能的必要特征.
推土机是AMD下一代微架构的处理器,事实上,它将是AMD自2003年后第一次对处理器架构进行重大改变.新一代的处理器将提供远高于现代产品的高性能,同时也加入SSE5指令集.
首款推土机系列桌面处理器代号为Orochi,将会拥有超过4个以上的处理器核心,8M以上的缓存并支持DDR3内存,基于32nm工艺.服务器版处理器代号为Valencia和Interlagos,这两款处理器将会拥有6、8以及12个处理器核心.
AMD至今从未采用过同步多线程(SMT)也就是Intel所称的超线程技术。虽然这样的技术在当年的P4时代显得并无实际用途,但到了2015年为止,越发普及的多线程环境让超线程重新焕发了青春。
发展前景
截止到2014年,以应用环境来看,超线程技术可以让一些特定应用程序显著提速达10到15%。除了Intel的在Nehalem、Atom等中引入的超线程,无论IBM的Power系列,Sun的T1/T2/Rock系列等处理器架构都应用了类似的SMT同步多线程技术,用少量的晶体管带来大幅度的多线程性能提升。
一位AMD工程师日前向媒体坦诚,不支持单核多线程技术让Opteron处理器看起来性能比不上Intel的低端Xeon。据称,AMD内部高层已经承认,没有早早引入此类技术是一项技术选择上的失误。
不过,AMD副总裁兼服务器工作站业务总经理Patrick Patla接受采访时,并没有明确透露单核多线程技术的未来,而是继续重申已经公布的Opteron路线图:“如果你看一下我们路线图以及我们在多线程处理器市场的表现就会知道,我们相信每条线程都拥有完整的核心是目前的最佳选择。2010年,我们就会推出12核处理器,2011年16核。我们相信未来几年内我们就能够完善支持48或64线程环境,让我们来看看2012到2013年会带来些什么吧。”
既然2011年才是16核,那么2012到2013直接跳跃到48甚至64核似乎并不是那么正常。另外,Patrick Patla前面句句都在讲“核”,而到了后面又变成了“线程”,似乎就在暗示到时AMD可能会采纳单核多线程技术。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式