JAVA多线程同步问题
synchronized(obj)中的OBJ到底是什么东西啊?为什么随便一个东西都可以当做锁呢?我明白同步的问题,可我问的OBJ到底是什么啊。。。我想知道的是OBJ加锁的...
synchronized(obj) 中的OBJ到底是什么东西啊?为什么随便一个东西都可以当做锁呢?
我明白同步的问题,可我问的OBJ到底是什么啊。。。我想知道的是OBJ加锁的原理哦~ 我知道是个对象,可是我想问的是为什么是个对象,这个对象又是怎么完成锁定的!!!我想知道的是原理,原理!拜托啦。。。各位啊。。。 一楼的同志,你帮我翻译过来我就给你200分。。。 一定要自己翻译哈,嘎嘎 展开
我明白同步的问题,可我问的OBJ到底是什么啊。。。我想知道的是OBJ加锁的原理哦~ 我知道是个对象,可是我想问的是为什么是个对象,这个对象又是怎么完成锁定的!!!我想知道的是原理,原理!拜托啦。。。各位啊。。。 一楼的同志,你帮我翻译过来我就给你200分。。。 一定要自己翻译哈,嘎嘎 展开
5个回答
展开全部
噢,是这样的,不是什么东西都能当做锁,你不能这样理解。
synchronized(obj),obj这里是你所在类的MIDlet的一个实例对象。
目的是解决因线程不同步而对数据造成破坏的问题。
假如:在一个类中有一个成员变量a,还有两个线程,如果线程不同步的话,这两个线程有可能同时访问同一个变量a,这样的话,就会出现问题,最后执的结果a到底是几呢,所以就要使用线程同步这个办法了。
使用线程同步后,线程1在访问a的时候,我加了一把锁,在这个时候别的线程是不允许访问a的,等线程1对a有访问结束后,就会去掉这把锁,其他的线程再访问a的时候,又会加锁,这样在同一时候,只能有一方访问a,这样就不会出现问题,我说这么多,你明白了吗?希望你能明白,不然我说的算白说了,呵呵!!!!
synchronized(obj),obj这里是你所在类的MIDlet的一个实例对象。
目的是解决因线程不同步而对数据造成破坏的问题。
假如:在一个类中有一个成员变量a,还有两个线程,如果线程不同步的话,这两个线程有可能同时访问同一个变量a,这样的话,就会出现问题,最后执的结果a到底是几呢,所以就要使用线程同步这个办法了。
使用线程同步后,线程1在访问a的时候,我加了一把锁,在这个时候别的线程是不允许访问a的,等线程1对a有访问结束后,就会去掉这把锁,其他的线程再访问a的时候,又会加锁,这样在同一时候,只能有一方访问a,这样就不会出现问题,我说这么多,你明白了吗?希望你能明白,不然我说的算白说了,呵呵!!!!
展开全部
多线程的同步有两种方法,
一种是同步代码块,语句如下:
synchronized(obj){
//关键代码
}
另一种是同步方法:
public synchronized return_type method_name(argiments_lists){
//关键代码
}
你问的obj就是第一种同步方法,它是当前线程的引用,一般会用this关键字来指代,但有时也会用一个虚拟的变量来代替。
一种是同步代码块,语句如下:
synchronized(obj){
//关键代码
}
另一种是同步方法:
public synchronized return_type method_name(argiments_lists){
//关键代码
}
你问的obj就是第一种同步方法,它是当前线程的引用,一般会用this关键字来指代,但有时也会用一个虚拟的变量来代替。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
简单说就是个对象。你也可以用this关键字。
试试看。
试试看。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上说的是,解决的是线程对变量的互斥访问
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
每一个对象都有一个监视器,就是我们通常说的锁,所以只要是对象都可以当锁,这里的obj既可以是OBject的对象,也可以是String的对象。一个对象对应一把锁,一把锁互斥地被线程拥有,synchronized(obj) 是同步块方式的实现,用来将一段程序块加锁,当一个线程访问该程序块时,会先判断obj这个监视器是否加锁,如果没有被加锁,就将obj监视器加锁。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询