由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Java版 - 请教:怎么把synchronize的method改成用thread 但thread safe呢?
相关主题
Apply lock on a class.Java synchronized method一问
问一个基础问题Java concurrency的疑惑,难道我理解错了? (转载)
发现 synchronized 的一个问题synchronization for counters
size() method 为什么需要多线程保护?Re: How to lock a file and detect a thread is over?
How to make code thread-safe?应该怎么答?synchronization 锁住了什么?
multi-threading guru们 (转载)问一个java的面试题 (转载)
新手问个multi-threading关于synchronized和volatile的问题如何让两个socket并行执行thread
java 程序中的实时控制Suggestion Re: 发现 synchronized 的一个问题
相关话题的讨论汇总
话题: thread话题: class话题: method
进入Java版参与讨论
1 (共1页)
p*******s
发帖数: 535
1
现在在改一个我单位系统里的一个class,里面几乎所有method都是synchronized。
我的想法是,把某些method先改成不是synchronized,如果能够确保这些method用的
class variables 是 synchronized的被读和写。这样可行吗?
如果可以,我不太确定怎么动这些class variables,是不是就改成concurrent data
type就可以了?
这样我是不是要留意下dead lock的问题?因为是各个variable各自管自己的thread
safety问题。
这个class很大,差不多3000行,我现在根本就心里发怵,不敢下手改。
如果有人对thread很熟悉,请多多指点下我,
我给发包子。
g*****g
发帖数: 34805
2
You start with minimizing instance variable, split the class to smaller ones
. 3000 line for a class is too many. Then you can replace them using
concurrency utilities.
And if I were you, I'd start with some unit tests before refactoring.

【在 p*******s 的大作中提到】
: 现在在改一个我单位系统里的一个class,里面几乎所有method都是synchronized。
: 我的想法是,把某些method先改成不是synchronized,如果能够确保这些method用的
: class variables 是 synchronized的被读和写。这样可行吗?
: 如果可以,我不太确定怎么动这些class variables,是不是就改成concurrent data
: type就可以了?
: 这样我是不是要留意下dead lock的问题?因为是各个variable各自管自己的thread
: safety问题。
: 这个class很大,差不多3000行,我现在根本就心里发怵,不敢下手改。
: 如果有人对thread很熟悉,请多多指点下我,
: 我给发包子。

c*********e
发帖数: 16335
3
一个class 3000行?单位里有没有这个project的uml结构,找到了看看。用uml设计
project非常重要,这是地基。

【在 p*******s 的大作中提到】
: 现在在改一个我单位系统里的一个class,里面几乎所有method都是synchronized。
: 我的想法是,把某些method先改成不是synchronized,如果能够确保这些method用的
: class variables 是 synchronized的被读和写。这样可行吗?
: 如果可以,我不太确定怎么动这些class variables,是不是就改成concurrent data
: type就可以了?
: 这样我是不是要留意下dead lock的问题?因为是各个variable各自管自己的thread
: safety问题。
: 这个class很大,差不多3000行,我现在根本就心里发怵,不敢下手改。
: 如果有人对thread很熟悉,请多多指点下我,
: 我给发包子。

s******e
发帖数: 493
4
read "java concurrency in practice' several times if you haven't done it
before you actually start.
T****U
发帖数: 3344
5
应该把访问class/instance member的功能集中到几个function, 然后synchronize这几
个function就可以了。
另外不要让instance method访问class member

【在 p*******s 的大作中提到】
: 现在在改一个我单位系统里的一个class,里面几乎所有method都是synchronized。
: 我的想法是,把某些method先改成不是synchronized,如果能够确保这些method用的
: class variables 是 synchronized的被读和写。这样可行吗?
: 如果可以,我不太确定怎么动这些class variables,是不是就改成concurrent data
: type就可以了?
: 这样我是不是要留意下dead lock的问题?因为是各个variable各自管自己的thread
: safety问题。
: 这个class很大,差不多3000行,我现在根本就心里发怵,不敢下手改。
: 如果有人对thread很熟悉,请多多指点下我,
: 我给发包子。

c*********e
发帖数: 16335
6
问题是,有的人synchronize code,有的人synchronize data. synchronize的方法非常
重要。

【在 s******e 的大作中提到】
: read "java concurrency in practice' several times if you haven't done it
: before you actually start.

c******n
发帖数: 4965
7
best way:
rewrite from scratch
you don't want to wipe somebody's ass

【在 p*******s 的大作中提到】
: 现在在改一个我单位系统里的一个class,里面几乎所有method都是synchronized。
: 我的想法是,把某些method先改成不是synchronized,如果能够确保这些method用的
: class variables 是 synchronized的被读和写。这样可行吗?
: 如果可以,我不太确定怎么动这些class variables,是不是就改成concurrent data
: type就可以了?
: 这样我是不是要留意下dead lock的问题?因为是各个variable各自管自己的thread
: safety问题。
: 这个class很大,差不多3000行,我现在根本就心里发怵,不敢下手改。
: 如果有人对thread很熟悉,请多多指点下我,
: 我给发包子。

p*******s
发帖数: 535
8
为什么要在改前做unit test啊?
没看到好处啊。
而且拆分class,依你的经验,拆分成多少个,多大的class,会比较好驾驭呢?

ones

【在 g*****g 的大作中提到】
: You start with minimizing instance variable, split the class to smaller ones
: . 3000 line for a class is too many. Then you can replace them using
: concurrency utilities.
: And if I were you, I'd start with some unit tests before refactoring.

p*******s
发帖数: 535
9
我也是这么想来着。。。

【在 T****U 的大作中提到】
: 应该把访问class/instance member的功能集中到几个function, 然后synchronize这几
: 个function就可以了。
: 另外不要让instance method访问class member

p*******s
发帖数: 535
10
这个肯定没有。

【在 c*********e 的大作中提到】
: 一个class 3000行?单位里有没有这个project的uml结构,找到了看看。用uml设计
: project非常重要,这是地基。

相关主题
multi-threading guru们 (转载)Java synchronized method一问
新手问个multi-threading关于synchronized和volatile的问题Java concurrency的疑惑,难道我理解错了? (转载)
java 程序中的实时控制synchronization for counters
进入Java版参与讨论
w**z
发帖数: 8232
11
改完后,所有以前工作的 unit test 都应该通过。the consumer of your class
should not be affected. Is backward compatible your requirement? 要不然你咋
知道你没搞坏啥?用眼睛看?

【在 p*******s 的大作中提到】
: 为什么要在改前做unit test啊?
: 没看到好处啊。
: 而且拆分class,依你的经验,拆分成多少个,多大的class,会比较好驾驭呢?
:
: ones

z**s
发帖数: 134
12
3000太多了把

【在 p*******s 的大作中提到】
: 现在在改一个我单位系统里的一个class,里面几乎所有method都是synchronized。
: 我的想法是,把某些method先改成不是synchronized,如果能够确保这些method用的
: class variables 是 synchronized的被读和写。这样可行吗?
: 如果可以,我不太确定怎么动这些class variables,是不是就改成concurrent data
: type就可以了?
: 这样我是不是要留意下dead lock的问题?因为是各个variable各自管自己的thread
: safety问题。
: 这个class很大,差不多3000行,我现在根本就心里发怵,不敢下手改。
: 如果有人对thread很熟悉,请多多指点下我,
: 我给发包子。

l*********7
发帖数: 140
13
chi
F*******R
发帖数: 149
14
Re.

【在 l*********7 的大作中提到】
: chi
M***4
发帖数: 293
15
re bz~
r*****l
发帖数: 2859
16
1, Find out why the synchronized methods need to access class level members.
2, If they do it in order to share data across threads, then you will need
some synchronization. You can either centralize the synchronized blocks or
externalize the data and make the data threadsafe.
3, If they do it in order to share data between different methods for one
thread, then use ThreadLocal.

【在 p*******s 的大作中提到】
: 现在在改一个我单位系统里的一个class,里面几乎所有method都是synchronized。
: 我的想法是,把某些method先改成不是synchronized,如果能够确保这些method用的
: class variables 是 synchronized的被读和写。这样可行吗?
: 如果可以,我不太确定怎么动这些class variables,是不是就改成concurrent data
: type就可以了?
: 这样我是不是要留意下dead lock的问题?因为是各个variable各自管自己的thread
: safety问题。
: 这个class很大,差不多3000行,我现在根本就心里发怵,不敢下手改。
: 如果有人对thread很熟悉,请多多指点下我,
: 我给发包子。

1 (共1页)
进入Java版参与讨论
相关主题
Suggestion Re: 发现 synchronized 的一个问题How to make code thread-safe?应该怎么答?
interview question:multi-threading guru们 (转载)
synchronized method does lock the object that passed into the method as a parameter?新手问个multi-threading关于synchronized和volatile的问题
能不能讲讲IB和对冲的java developer的面试,大概会面什么java 程序中的实时控制
Apply lock on a class.Java synchronized method一问
问一个基础问题Java concurrency的疑惑,难道我理解错了? (转载)
发现 synchronized 的一个问题synchronization for counters
size() method 为什么需要多线程保护?Re: How to lock a file and detect a thread is over?
相关话题的讨论汇总
话题: thread话题: class话题: method