static方法同步的问题?

Sylix 2004-07-16 12:15:34
有几个线程几乎同时访问一个static方法, 产生一个数据, 会不会造成几个线程同时取数据会有错乱的问题?
...全文
403 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
iorisiori 2004-07-16
  • 打赏
  • 举报
回复
同步方法.不过这样效率很低,最好别用
梦想家起飞 2004-07-16
  • 打赏
  • 举报
回复
呵呵。。如果不想导致脏读又想用静态方法,那么就只好把它声明为同步方法了(同楼上),不过这样的后果是执行效率降低。

但是,如果不调用静态成员变量的话,是不会导致脏读的。

如果处理逻辑复杂,同步的时候cpu开销将会很大,这种情况下还不如用类实例方法。
moonyuezhao 2004-07-16
  • 打赏
  • 举报
回复
同步方法
ChDw 2004-07-16
  • 打赏
  • 举报
回复
你可以在方法中声明synchronized啊
public synchronized static void method()...;
Sylix 2004-07-16
  • 打赏
  • 举报
回复
to wingtrace(暮寒.烟灰.风化物) ,
多谢.

在什么情况下在同一个实例中同时调用?
梦想家起飞 2004-07-16
  • 打赏
  • 举报
回复
牺牲内存?还是牺牲cpu时间?鱼与熊掌不可得兼,设计程序的时候需要根据实际需要和性能瓶颈的实际所在好好斟酌。:)
梦想家起飞 2004-07-16
  • 打赏
  • 举报
回复
一般只有在多线程的时候才会产生脏读问题。非多线程的话是不需要考虑的。

使用实例方法的话,只要不是在同一个实例中同时调用,就不会造成脏读。在不同的类实例里面调用另一个类里面的非静态成员函数,那么每一个调用请求都需要先实例化一个目的类实例,每个类实例都有独立的内存空间,这样是不会脏读的。

如果你想得到更加明确的大案或者研究更深层次的问题可以参考《java编程思想》,第二版的时候有专门的“多线程”一章,到第三版的时候变成“并发”一章了。内容基本一样的。
hq1305018 2004-07-16
  • 打赏
  • 举报
回复
1、用同步,效率低。
2、不用静态方法,每个需调用的方法建立对象,再调用。这种方法也存在同步问题,但你的sychronized加在操作共享变量的语句部分,就不会太影响效率。

如下:

aa(){//第一种方法是在前面写sychronized;
....
...
//sychronized{//第二种方法把同步用在这儿;
//操作共享变量的语句;
//}同步结束;
...
...
}

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧