社区
Java SE
帖子详情
static方法同步的问题?
Sylix
2004-07-16 12:15:34
有几个线程几乎同时访问一个static方法, 产生一个数据, 会不会造成几个线程同时取数据会有错乱的问题?
...全文
403
8
打赏
收藏
static方法同步的问题?
有几个线程几乎同时访问一个static方法, 产生一个数据, 会不会造成几个线程同时取数据会有错乱的问题?
复制链接
扫一扫
分享
转发到动态
举报
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{//第二种方法把同步用在这儿;
//操作共享变量的语句;
//}同步结束;
...
...
}
静态
同步
方法
(
static
synchronizd)
Java语法规定,任何线程进入
同步
方法
、
同步
代码块之前,必须先获取
同步
方法
、
同步
代码块对应的
同步
监视器。 对于
同步
代码块而言,程序必须为它显示的指定
同步
监视器(可为this也可以自定义Object类型的全局变量);对于
同步
非静态
方法
而言,该
方法
的
同步
监视器是this----即调用该
方法
的java对象;对于静态的
同步
方法
而言,该
方法
的
同步
监视器不是this而是该类本身。
同步
方法
中加
static
与不加
static
的区别 、类锁
同步
方法
中加
static
与不加
static
的区别无
static
时 无
static
时 在不加
static
时候 ,synchronized默认的锁对象为 this,也就是调用该
方法
的那个对象,对于同一个对象调用的不同的
同步
方法
,无论如何休眠,先执行结束的都是 先拿到锁的那个线程 ```java public class Test_1{ public
static
void main(String[] args) throws InterruptedException { A a=new
有关synchronized
同步
的
问题
今天看到了一个有关synchronized的题,自己也是正在复习JAVA基础知识。 class Test{ synchronized
static
void sayHello3(){ } synchronized void getX(){ } } 问的是这两个
方法
同步
吗? 首先我们应该理解问这个题目的意思,题上问的是这两个
方法
是不是
同步
的,这两个
方法
一个是静态
方法
java synchronized:(实例
方法
同步
、静态
方法
同步
)区别
java synchronized:(实例
方法
同步
、静态
方法
同步
) 实例
方法
同步
:是指
同步
在拥有该
方法
的实例对象上, 这样,每个实例其
方法
同步
都
同步
在不同的对象上,即该
方法
所属的实例。只有一个线程能够在实例
方法
同步
块中运行。如果有多个实例存在,那么一个线程一次可以在一个实例
同步
块中执行操作。一个实例一个线程。 静态
方法
同步
:是指
同步
在该
方法
所在的类对象(并非类生成的实例对象)上。
synchronized 修饰在
static
方法
和非
static
方法
的区别
Java中synchronized用在静态
方法
和非静态
方法
上面的区别在Java中,synchronized是用来表示
同步
的,我们可以synchronized来修饰一个
方法
。也可以synchronized来修饰
方法
里面的一个语句块。那么,在
static
方法
和非
static
方法
前面加synchronized到底有什么不同呢?大家都知道,
static
的
方法
属于类
方法
,它属于这个Class(注意:这里的Cl
Java SE
62,634
社区成员
307,269
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章