Redian新闻
>
请教:怎么把synchronize的method改成用thread 但thread safe呢?
avatar
请教:怎么把synchronize的method改成用thread 但thread safe呢?# Java - 爪哇娇娃
l*l
1
This is depressing...
You might remember when this accident happened 12 years ago .
This Southwest Airlines flight from Vegas overshot the runway at Burbank.
The plane smashed past the airport fence, careened across the street
and ended up with a collapsed landing gear, right next to a gas station.
But that's not the amazing part!!!
(See attached photo)
avatar
p*s
2
现在在改一个我单位系统里的一个class,里面几乎所有method都是synchronized。
我的想法是,把某些method先改成不是synchronized,如果能够确保这些method用的
class variables 是 synchronized的被读和写。这样可行吗?
如果可以,我不太确定怎么动这些class variables,是不是就改成concurrent data
type就可以了?
这样我是不是要留意下dead lock的问题?因为是各个variable各自管自己的thread
safety问题。
这个class很大,差不多3000行,我现在根本就心里发怵,不敢下手改。
如果有人对thread很熟悉,请多多指点下我,
我给发包子。
avatar
T*y
3
liozodell, you are also here ah.
I thought that you were referring to that unclear image at the tip of the
airplane. What was it exactly? Just a broken tip, or some ghost?
Well, the gas price indeed goes up so much nowadays.

【在 l*******l 的大作中提到】
: This is depressing...
: You might remember when this accident happened 12 years ago .
: This Southwest Airlines flight from Vegas overshot the runway at Burbank.
: The plane smashed past the airport fence, careened across the street
: and ended up with a collapsed landing gear, right next to a gas station.
: But that's not the amazing part!!!
: (See attached photo)

avatar
g*g
4
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很熟悉,请多多指点下我,
: 我给发包子。

avatar
l*l
5
呵呵,是咱乡版老大的号召,就进来晃晃挣点包子做宵夜哈
我和大多数人一样,先聚焦在事故和飞机,压坏的小车,
还想整个图片没准是PS的。:)
最后才发现The Point 。 只是好玩哈。大家不喜欢这个油价吗?

★ 发自iPhone App: ChineseWeb - 中文网站浏览器

【在 T*******y 的大作中提到】
: liozodell, you are also here ah.
: I thought that you were referring to that unclear image at the tip of the
: airplane. What was it exactly? Just a broken tip, or some ghost?
: Well, the gas price indeed goes up so much nowadays.

avatar
c*e
6
一个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很熟悉,请多多指点下我,
: 我给发包子。

avatar
s*y
7
好玩倒是好玩,不过12年前什么地方油价这么高啊?

【在 l*******l 的大作中提到】
: 呵呵,是咱乡版老大的号召,就进来晃晃挣点包子做宵夜哈
: 我和大多数人一样,先聚焦在事故和飞机,压坏的小车,
: 还想整个图片没准是PS的。:)
: 最后才发现The Point 。 只是好玩哈。大家不喜欢这个油价吗?
:
: ★ 发自iPhone App: ChineseWeb - 中文网站浏览器

avatar
s*e
8
read "java concurrency in practice' several times if you haven't done it
before you actually start.
avatar
w*9
9
12年前可能一块钱不到。我朋友说那时候油价比矿泉水的价格还低。

【在 s*******y 的大作中提到】
: 好玩倒是好玩,不过12年前什么地方油价这么高啊?
avatar
T*U
10
应该把访问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很熟悉,请多多指点下我,
: 我给发包子。

avatar
l*l
11
看地方吧。

【在 w*****9 的大作中提到】
: 12年前可能一块钱不到。我朋友说那时候油价比矿泉水的价格还低。
avatar
c*e
12
问题是,有的人synchronize code,有的人synchronize data. synchronize的方法非常
重要。

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

avatar
s*y
13
12年前不知道,10年前我来的时候我们那的油价是1.1左右,所以12年前1.5我觉得很过分
据说加州油价高,不知道高到多少

【在 w*****9 的大作中提到】
: 12年前可能一块钱不到。我朋友说那时候油价比矿泉水的价格还低。
avatar
c*n
14
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很熟悉,请多多指点下我,
: 我给发包子。

avatar
p*s
15
为什么要在改前做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.

avatar
p*s
16
我也是这么想来着。。。

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

avatar
p*s
17
这个肯定没有。

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

avatar
w*z
18
改完后,所有以前工作的 unit test 都应该通过。the consumer of your class
should not be affected. Is backward compatible your requirement? 要不然你咋
知道你没搞坏啥?用眼睛看?

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

avatar
z*s
19
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很熟悉,请多多指点下我,
: 我给发包子。

avatar
l*7
20
chi
avatar
F*R
21
Re.

【在 l*********7 的大作中提到】
: chi
avatar
M*4
22
re bz~
avatar
r*l
23
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很熟悉,请多多指点下我,
: 我给发包子。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。