廖先琴
摘 要:JAVA语言是一种应用非常广泛的语言,从桌面应用程序到WEB应用都有其身影的存在,WEB项目中的服务器端就有如Servlet、JSP和数目众多的第三方框架支持,JAVA能在WEB应用中争得一席之地与它的各种特性是分不开的,其中就包括它出色的多线程机制。本文将在众多文献基础上,探讨WEB项目中如何应用好JAVA的多线程机制。
关键词:WEB;JAVA多线程
1 WEB项目应用JAVA的优势
在WEB开发项目中,可供选择的语言并不少,当前尤以JAVA语言最为受到程序开发人员的宠爱,它是一种面向对象的编程语言,在1995年SUN公司推出,之后就迅速的凭借它的高度通用型、强大的可移植性以及安全性迅速流行起来,渗透到了众多开发领域。在现在的WEB项目开发中,服务器端程序设计是非常重要的部分。用JAVA作为开发语言有着明显的优势:(1)支持多线程,并具有出色的多线程安全机制。作为接受众多客户访问的服务器,必须要求能够妥善处理各种并发事件,也就是用于开发服务器端的语言一定要支持多线程且应具备较高的多线程安全性。(2)通用性强。在许多的WEB项目中,服务器端还可能面临来自不同类型客户端的访问,所以开发服务器端的语言还应具有较高的通用性。
2 JAVA的多线程及应用方法
进程并不会执行代码,代码的执行体是线程,一般的情况下,我们所说的多线程是指程序在计算机上存在多个控制流并发执行,它们均属于同一个进程。操作系统一般会提供基本的多线程操作API并维护多线程环境,包括堆栈、寄存器、环境变量、句柄等等。我们想用JAVA的多线程,就应该先了解JAVA的多线程。JAVA的多线程用法比操作系统提供的原始的多线程相关API更加的简单,也更加的安全,许多多线程编程中需要注意的问题JAVA都已经帮开发人员做好了,因此,开发人员可以很容易的应用JAVA写出能够良好运行的多线程程序,从而节省出更多的精力用于功能程序设计上。
2.1 JAVA下多线程的创建
使用JAVA创建多线程有两种方法,一种是让线程类从Thread继承,然后重载它的run()方法,重载后的run()方法将作为该类的线程代码入口点。另一种方法是让编写的线程类实现Runnalbe接口,并重载接口里面的run()方法。之所以有两种创建方法是为了消除JAVA的单继承局限性。
2.2 JAVA的多线程使用方法
编写多线程程序,便避不开一些多线程调度的问题,多线程在运行期间共享资源的管理、线程之间的同步都需要考虑。JAVA提供了一些机制来做这些事情。在对共享资源访问的问题上,可以用Synchronized关键字,将访问共享资源的代码方法前加上该关键字就可以保证该代码块同一时间只能有一个线程在运行。在JAVA线程同步问题上,有两个重要的方法,分别是wait()和notify()。wait()方法的作用是停止线程的运行,等待其他线程通知后在继续运行;notify()方法的作用通知某线程可以继续运行。以上为JAVA中编写多线程程序必须掌握的基本技术,除此之外还有线程让步、线程合并以及线程优先级的设定等常用技术也应掌握。
2.3 多线程的生命周期
在WEB项目中,编写多线程程序几乎是必须的,怎样利用有限的系统资源合理利用多线程是开发人员必须考虑的问题。一般情况下,网络服务器中的线程按照功能可以分为两类,一类用作并发服务,而另一类用作反复服务。JAVA中的线程起于线程类中的start方法,之后转入到就绪状态,等待操作系统进行资源调度,操作系统完成准备任务后,将执行上文中提到的run()方法,线程开始运行。运行过程中,线程可以在就绪、阻塞状态当中转换,最后当不再需要该线程时,会触发InterruptedException异常,系统会截获该异常并结束线程。
3 使用JAVA多线程值得注意的问题
多线程程序的编写复杂程度远超单线程程序,但在WEB项目的开发中又必须依靠多线程来提高系统服务效率,所以在应用JAVA多线程进行编程时一定要小心,避免因应用多线程而导致系统出现问题,最常见的问题就是在并发系统中的公平性与安全性问题。
在WEB应用中会存在多个客户,程序需要经常访问服务器中的共享资源,虽然服务器程序在宏观上是保持并发性的,但是在微观上各个线程却是独占系统资源执行的,并发性的本质其实是CPU快速的在不同线程间切换执行。多个线程对共享资源访问时,如果处理不好就会导致数据安全性问题或者是反方向的线程公平性问题。
为了数据安全性,在编写多线程程序时对共享资源的访问设置一般都是线程独占的,同一时刻只能有一个线程访问,其他线程处于等待状态。如果说在系统里的多线程中存在部分优先级较其他线程优先级高并且一直都有高优先级线程插队访问资源,那么对于低优先的线程就是不公平的,表现出来的现象可能就是执行某一个功能但是服务器无回应。反之,如果过多的关注线程之间的公平性,那么有可能造成本应由优先级更高的线程获得资源,但是却被低优先级线程长期占有。处理数据安全性与线程公平性的问题,最好的方法是依靠线程运行情况动态的调整线程优先级,视情况不同采取不同的控制调配策略。
[参考文献]
[1]顾晓宁.基于JAVA语言在WEB开发的知识探讨[J].湖北函授大学学报,2012(01).
[2]高飞.使用JAVA语言开发WEB应用软件的知识探讨[J].电子世界,2012(05).
[3]李双权.一种Java多线程可达性测试框架系统的研究和实现[D].暨南大学,2003(04).
[4]韦庆清,任卫东.Java多线程编程中数据安全的应用研究[J].现代计算机,2012(09).