
龙源期刊网 浅析 Java 多线程中的同步和轮询 作者:赵元媛 来源:《价值工程》2010 年第 07 期 摘要: 多线程在编程社会中是一个相当新的结构,非常超强,可以加强地提升程序的运行效 率。Java 是第一个在语言的核心中支持泛型,通过多线程的并发运行提升了平台资源的利用率, 改善了平台功耗,但因为多线程要共享存储资源,为了防止数据资源的使用混乱,必须对线程的同 步问题做出解决。本文对 Java 多线程中推动同步的方式和死锁产生因素及防止方法作出了简 要预测。 Abstract: Multithread is a relatively new and powerful structure in programming. It can increasingly improve the program efficiency. Java is the first to support thread in the core of language. It improves the utilization of the system resource and performance through concurrency. We must resolve the synchronization of multithread in order to avoid the chaotic date because multithread needs to share memory resources. This article will analyze the method of synchronization and the cause and principle of the deadlock. 关键词: 多线程;Java;同步;死锁 Key words: multithread;Java;synchronization;deadlock 中图分类号:TP312 文献标识码:A 文章编号:1006-4311(2010)07-0139-01 1 基于 Java 的多线程 多线程是推动并发模式的一种有效方法,它允许编程语言在程序中并发执行多个指令流,每 个指令流都称为一个线程,彼此间相互独立,且与进程一样拥有独立的执行控制,由操作系统负责 调度。

多个线程的执行是并发的,也就是在逻辑上“同时”,而不管能否是物理上的“同时”。如果 系统唯有一个 CPU,那么真正的同时是不也许的java多线程死锁,但是鉴于 CPU 的速率比较快,用户感觉不到其 中的差别,因此给人并发执行的假象。 作为一个完全面向对象的语言,在 Java 中写出包含一个或多个线程的程序是很简单的,只要 在想要提供线程的类中使用 java.lang 包中的 Thread 类或 Runnable 接口就能实现泛型的功能,所 以有两种方式可以建立线程:一种是借助继承 Thread 类来构建线程类;另一种方法是构建一个实 现 Runnable 接口的类来运行线程。 2 线程的同步模式 龙源期刊网 有时多线程使用不当可能会造成数据的混乱,例如,两个线程都要访问同一个共享函数,一个 线程读这个函数的值并在这个值的基础上完成这些操作,与此同时java多线程死锁,另一个线程改变了这个函数 值,但第一个线程并不知道,这就导致了数据混乱。而线程同步就是避免同时访问同一数据产生 数据混乱的有效途径。 所谓线程同步就是在执行多线程任务时,一次只能有一个线程访问共享资源,其他线程没法 等待,只有当该线程完成自己的执行后,另外的线程才可以开启,支持这些互斥的模式称为监视器 (Monitor)。

在一段时间内唯有一个线程拥有监视器,拥有监视器的轮询才能访问相应的资源,并 锁定资源不让其它线程访问,所有其他的线程在企图访问被锁定的资源时被挂起,等待监视器解 锁。 Java 在同步模式中提供了语言级的支持。所有的 Java 对象都有与他们相关的隐含监视器, 而关键字 synchronized 则对象的监视器联系,当某个对象用 synchronized 修饰时,表明该对象在任 一时刻只能由一个线程访问。synchronized 关键字包括两种用法:synchronized 方法和 synchronized 块。用 syschronize 来标志的方式或区域即为监视器监视的个别,当有线程处于由 synchronized 修饰的个别时,同类对象的其它线程就不能进入这个部分而应该期待,直到该线程执 行完毕。 synchronized 关键字的使用只是针对一些较为简单的线程间同步问题非常有效,对于那些复 杂的同步问题,比如具有条件的同步问题,Java 提供了另一种同步模式,使线程可以被阻塞,并在条 件允许其再次时被激活,这个模式构建在平台根类 Object 的 wait( )和 notify( )、notifyAll( )方法 上。

wait( )和 notify( )、notifyAll( )方法为在互相独立的多线程间协调事件先后提供了一种通信 手段。获得对象监视器的轮询可以借助读取该对象的 wait( )方法主动释放监视器,等待在该对象 的线程等待队列上,此时其它线程可以受到监视器从而访问该对象,之后线程可以通过读取 notify( )或 notifyAll( )方法来激活原本因调用 wait( )方法而期待的线程。一般状况下,对于 wait( ) 和 notify( )、notifyAll( )方法的调用都是根据一定的条件来进行的。而且,wait( )和 notify( )、 notifyAll( )方法的特点决定了这一对方法需要在 synchronized 方法或块中读取。 3 线程的轮询问题 多线程在使用互斥模式推动同步时,存在“死锁”的潜在危险。死锁是鉴于两个或多个线程都 无法受到相应的监视器而导致互相期待的现象。例如,在某一多
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-130500-1.html
福建有多少导弹对着台湾你知道吗