java中,synchronized 的使用?

作者&投稿:韦兰 (若有异议请与网页底部的电邮联系)
Java怎么使用synchronized声明一个变量~

首先要说明的是,java里不能直接使用synchronized声明一个变量,而是使用synchronized去修饰一个代码块或一个方法。

详细说明如下:

synchronized用来修饰一个方法或者一个代码块,它用来保证在同一时刻最多只有一个线程执行该段代码。
一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。
二、然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。
三、尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞。
四、第三个例子同样适用其它同步代码块。也就是说,当一个线程访问object的一个synchronized(this)同步代码块时,它就获得了这个object的对象锁。结果,其它线程对该object对象所有同步代码部分的访问都被暂时阻塞。
五、以上规则对其它对象锁同样适用。

示例代码:
public class Thread1 implements Runnable {
public void run() {
synchronized(this) {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + " synchronized loop " + i);
}
}
}
public static void main(String[] args) {
Thread1 t1 = new Thread1();
Thread ta = new Thread(t1, "A");
Thread tb = new Thread(t1, "B");
ta.start();
tb.start();
}
}
结果:
A synchronized loop 0
A synchronized loop 1
A synchronized loop 2
A synchronized loop 3
A synchronized loop 4
B synchronized loop 0
B synchronized loop 1
B synchronized loop 2
B synchronized loop 3
B synchronized loop 4

synchronized是java中的一个关键字 我们称其为同步关键字 主要是用来处理java中的同步机制

同一个资源被用户并发访问时,会出现并发问题,比如:有一个实例变量x,第一个用户访问它,并赋值为100,但还没有来得及打印出x,另一个哥们进来访问了x,并改为200,这时候第一个哥们兴高采烈的打印出x的值,但却发现不是100,是200.这哥们就郁闷了,怎么回事呢?

这就是并发问题,但如果把上面的代码用同步代码块包含起来,任意一个时间只能有一个哥们访问实例变量x,一直到这哥们执行完同步代码块中的所有代码后,其他哥们才能再访问。

synchronized 是同步的意识,

第一种是同步方法,就是只能在同时有一个线程操作这个方法,

第二种synchronized(this){
read();
update();}
是同步块,


有什么适合玩游戏的笔记本电脑?
游戏的运行内存都是比较大的,所以对于经常玩游戏的玩家需要根据自己的需求,选择适合自己的笔记本,但是用什么样的笔记本,需要看玩家玩什么配置的游戏,如果玩对运行内存不太高的游戏,像英雄联盟、地下城与勇士、穿越火线等等,就可以选择普通办公使用的笔记本就可以了,像联想、华硕、戴尔这种2000-4000元...

C语言编程题目,关于十个评委给选手打分的问题,去掉一个最高分和最低分...
输入好像应该用%lf 而且输出应该是%.1f 不是%.1lf

麻烦给个魔兽争霸地图仿盛大传奇的号玩玩啊,,职业没限制,级别高点的
4=qfucvomdoxvfoldojaohedgstghtosvncaglfrmbomdribzjezjegqwoxkolagsdohbzhfgcdosyrjeohfuptnqwgptrjenmbnhfnivojeombnlarivuqwosygsyncdocdrivuxkzhfgxkujerqwzmbosyrmbgcdrmbucdgjegjeoxkumbzivglazqwnqfgsdzsdrpkosductnhboxazhbzpkzxatumdzqyocakzharhbduhygpercagmyvgcyopwomdocauqynjtolfocvujwn...

我要个魔兽仿传奇1.3的存档 要40以上等级 最好有jp装备 邮箱116219022@...
4=qfucvomdoxvfoldojaohedgstghtosvncaglfrmbomdribzjezjegqwoxkolagsdohbzhfgcdosyrjeohfuptnqwgptrjenmbnhfnivojeombnlarivuqwosygsyncdocdrivuxkzhfgxkujerqwzmbosyrmbgcdrmbucdgjegjeoxkumbzivglazqwnqfgsdzsdrpkosductnhboxazhbzpkzxatumdzqyocakzharhbduhygpercagmyvgcyopwomdocauqynjtolfocvujwn...

北湖区17317858178: java中Synchronize是什么 -
尚党舒尔: 您好,用synchronize修饰表示这个类或方法为同步的,在运行过程中会上同步锁,即,如果有一个线程在访问这个方法,那么另外一个线程就不能访问它 synchronized 方法:通过在方法声明中加入 s...

北湖区17317858178: Java的synchronized加在方法上或者对象上有什么区别 -
尚党舒尔: Java的synchronized加在方法上或者对象上区别如下: 1.synchronized 在方法上,所有这个类的加了 synchronized 的方法,在执行时,会获得一个该类的唯一的同步锁,当这个锁被占用时,其他的加了 synchronized 的方法就必须等待 2.加在对象上的话,就是以这个对象为锁,其他也以这个对象为锁的代码段,在这个锁被占用时,就必须等待

北湖区17317858178: java中synchronized是怎么运用的,详解···
尚党舒尔: synchronized主要用于多线程环境,用来控制线程的同步, 一般synchronized可以形成代码块,也可以加到方法上 代码块synchronized(obj){ //表示在obj上加上锁,比如第一个线程进来,就会锁上,其他的线程进不来,当第一个线程运行完毕之后,obj上的队列中下一个线程才能进来 } public synchronized void testMethod(){ //在方法上使用synchronized表示将锁加到this上 }

北湖区17317858178: java中synchronized 是怎么用的,讲简单点,扼要点了. -
尚党舒尔: 在java中,synchronized 包括两种用法,synchronized 方法和 synchronized 块 简单的说明吧!1. synchronized 方法:通过在方法声明中加入 synchronized关键字来声明 synchronized 方法.例如:public synchronized void accessVal(int newVal);2. synchronized 块:通过 synchronized关键字来声明synchronized 块.语法如下: synchronized(syncObject) { //允许访问控制的代码 } 希望对你有所帮助!

北湖区17317858178: java中的synchronized()的具体作用 -
尚党舒尔: 在多线程的情况下,由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题.Java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问.由于我们可以通过 private...

北湖区17317858178: java中synchronized方法在哪个类中 -
尚党舒尔: Java的synchronized加在方法上或者对象上区别如下: 1.synchronized 在方法上,所有这个类的加了 synchronized 的方法,在执行时,会获得一个该类的唯一的同步锁,当这个锁被占用时,其他的加了 synchronized 的方法就必须等待 2.加在对象上的话,就是以这个对象为锁,其他也以这个对象为锁的代码段,在这个锁被占用时,就必须等待

北湖区17317858178: java方法synchronized在哪个类里面 -
尚党舒尔: synchronized是java中表示同步代码快的关键字.类似于final一样的关键字,不属于那个类.synchronized可以放在方法修饰符前,比如private synchronized void test(){},也可以放在方法内部,修饰某一段特定的代码.可能你贴出完整的代码会清晰一点,synchronized有一个地方需要注意,就是在给普通方法加锁与给静态方法加锁机制是不一样的.synchronized在静态方法上表示调用前要获得类的锁,而在非静态方法上表示调用此方法前要获得对象的锁.

北湖区17317858178: java 中 synchronized 是什么意思 -
尚党舒尔: 一段synchronized的代码被一个线程执行之前,他要先拿到执行这段代码的权限,在java里边就是拿到某个同步对象的锁(一个对象只有一把锁); 如果这个时候同步对象的锁被其他线程拿走了,他(这个线程)就只能等了(线程阻塞在锁池等...

北湖区17317858178: java中synchronized语义是什么意思?
尚党舒尔: synchronized语义是同步,但同步有两层含义,一个是互斥,另一个是可见. 你是要学习java吗?去达内看看,他们的课程还是不错的,java是他们的主课程.

北湖区17317858178: java中synchronized函数锁,锁的是什么? -
尚党舒尔: 修饰方法就代表锁的是此方法体,如 public synchronized int cal(){...} 表示每次访问此方法都只能一个线程访问,其他的要等待访问完了才能进入此方法,这是竞争锁,synchronized(obj)锁的是obj,代表只有获取了此obj锁,才能继续访问,更高级的推荐使用Lock或ReentrainLock.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网