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非常重要,这是地基。
|
|
|
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 | |
F*******R 发帖数: 149 | 14 Re.
【在 l*********7 的大作中提到】 : chi
|
M***4 发帖数: 293 | |
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很熟悉,请多多指点下我, : 我给发包子。
|