同步synchronized的问题

我有一个同步的问题,比如说List的子类有ArrayList和Vector,ArrayList是非同步的,线程不安全;Vector是同步的,线程安全。但是我们用java做web的时候,很多用户同时访问服务器,也算是多线程吧,那这样就不应该用ArrayList,而使用Vector,但是看别人写的代码,几乎都使用ArrayList,那这样就是非同步了。
所以我想问问,这个同步synchronized到底怎么理解?

嗯,同步不同步的,问题不在于理解“同步”二字。在这里,我们需要的是线程安全。

ArrayList,如果它线程不安全,那你也要确定是不是多于1个线程,在同一个时间去访问它才有意义啊。

如果你确定在同一个时间,有两个,或者更多线程读写ArrayList,那你就synchronized就行了。

如在ArrayList添加一个对象,要在多线程中保证每次操作安全,需要同步。而你所说的web中一般是每个线

程访问的是不同的ArrayList,就相当于单线程操作一个ArrayList,所以不用考虑线程安全。

当然如果想让ArrayList变得线程安全,最简单的就是试用同步包装器。

在web开发中如果ArrayList是类中的一个全局变量的话就要考虑同步的问题了,但是如果单单是这个变量只用读取操作的时候的话就不需要考虑是否同步了,如果确实在同步的话就synchronized加上对象锁

我确实没有理解同步和线程安全的意思,哪位大侠能给我详细的解释一下

servlet本身是非线程安全的,你的担心是对的。

如果一个ArrayList放在了成员变量是有很多类公用或者很多方法调用修改等等时,
那么使用他的地方常常会加同步,因为会出现多线程。

但是如果只是放在方法的局部变量中,只是方法自己用,或者只有一个线程会访问到,
那么是没必要同步的,从效率考虑,所以不使用vector。

你的那些类说是线程安全是因为对所有方法都进行了synchronized,简单来说,一个线程使用了这个对象,其他线程就必须等着执行完synchronized方法,synchronized只是保证那些类的成员同步.

synchronized的实质还是锁,类中synchronized,wait等使用了类中隐藏的锁,java核心技术上是这么说的.

来源:英超直播

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值