用javabean实现WEB服务功能时,每个客户端连上来都会新创建一javabean
如果想通过javabean来读写log文件,怎么来避免多线程引起的文件读写冲突错误?
是否可以使用synchronized 关键字来实现?
只要在BEAN中实现同步,对BEAN的每一个实现例之间同步的控制由系统来负责,
不要你担心,保证它们会按自己锁好的.
所谓线程控制,都是在同一进程中而言的,一个同步方法只能在同一进程中控制.
如果同时运行两个进程,它们之间的同步是不能互相控制的.假如CGI中的线程一个同步方法(只是假如),你的请求只能保证你的请求的进程中的线程做同步控制,不能保证我的请求的进程中方法同步,它们都是在一个进程中用文件锁来控制的.
就是说当一个CGI进程打开时别的所有进程都要等待.
但JSP和SERVLET是独立线程的,所有人访问的都是同一进程中的独立线程,它们都在同一进程中,当然能完全控制所有访问的同步机制,独立线程和可控制的安全性是J2EE结构最终要取代CGI的最大卖点.
对于一般的应用程序,一般是不会同时运行一个类的两个进程,万一要运行,如何控制它们之间的同步哩?同步有两种实现,一是方法同步,一是语法块同步,注意语法块同步的参数一般都是synchronized(this){..........}this是指向当前对象的句柄,也就是说我要做语法块中的事时,这个资源为当前对象(整个进程)所占用,也就是说象CGI那样进程中间同步控制.
对于BEAN是这样的,第一次请求都是一个实例,但BEAN只是一个对象,不管多少个这样的实例对象都在一个进程中的.