线程的同步

web中服务器是靠启多线程  来应付多个用户同时请求的,这个我们用debug时候可以看到的。

如果用spring建web项目,项目中的类都是单例的,同时来多个请求的时候,会有线程安全问题。

如果用@scope("prototype")将某个servlet改成多例,同时有多个请求时候,一个实例对应一个请求(即一个线程),不会有线程安全问题。

但是多例并不会提高效率,

 

再说同步,在做自动生成流水号机制时候,从查出当前最大的流水号,自增1,然后到保存,这一段要加同步

静态同步函数的锁是该类的字节码文件对象

非静态同步函数锁是this

public void generate(){}//自动生成流水号

要将这个方法变成同步的,直接public synchronized void generate()

同步是不是起作用,是不是能锁住线程,跟加不加静态没有关系,跟是不是多例也没有关系。。只跟锁有关系,锁的值填错了就锁不住线程。

如何测试同步是否起作用,在public synchronized void generate()已经加了同步的方法里面打上断点,在进入该方法前面再打一个断点,先发送一次请求在断点处停住,不要释放,然后再发送一次请求,在进入方法前停住debug,看看往下走能否进入方法体,还是一直在等待。。这个是我旁边的同事想出来的方法嘻嘻嘻嘻。

 

posted @ 2015-01-31 17:27  三十九级台阶  阅读(111)  评论(0编辑  收藏  举报