它的作用对象都是有哪此?请给兴趣几个例子好吗?谢谢!!!
JAVA多线程中的synchronized(obj)到底怎么用?
- 提问者网友:柠檬香
- 2021-04-21 23:03
- 二级知识专家网友:糜废丧逼
- 2021-04-21 23:14
........
}
这样,只在一个线和进个方法,那么此 “类”(方法所在的类) 就会被"上锁",其它线程不能访问。直到这个线程释放资源为止。
还可以将要实现同步的代码写到一个synchronized块里面,如:synchronized(obj){
......
}
注意,此处的obj是一个对象,你可以Object obj = new Object(); 也可以用this来代替,表示当前对象!
- 1楼网友:为你轻狂半世殇
- 2021-04-22 03:10
synchronized(obj)
俗称对象锁,线程锁!
锁什么,为什么要锁!这和多线程的同步有关系了。
比如说,A线程要对该对象的一个属性进行修改,而又不希望在修改的同时,别的线程也在修改同一个对象,这时候就要给这个对象加锁了。意思说,当A线程在使用该对象(已加锁)的时候,别的线程不能对该对象(已加锁)进行操作,除非等A线程使用完!
- 2楼网友:初心未变
- 2021-04-22 02:16
- 3楼网友:时光挺欠揍
- 2021-04-22 01:40
- 4楼网友:我的任性你不懂
- 2021-04-22 01:12
synchronized是处理线程同步问题的,其中任意一个线程只要使用这个方法时,直到这个线程使用完后才能用。
下面我做的一个小例子你 参考下:
package bag; import java.applet.*; import java.awt.*; public class Example extends Applet implements Runnable{ shoupiao sp=new shoupiao(); Thread peple1,peple2; TextArea text1; public void init() { peple1=new Thread(this); peple2=new Thread(this); text1=new TextArea(); this.add(text1); } public void start() { peple1.start(); peple2.start(); } public void run() { if(Thread.currentThread()==peple1) { String s=sp.shoupiao(20); text1.append("\n"+s); }else if(Thread.currentThread()==peple2) { String s=sp.shoupiao(5); text1.append("\n"+s); } } } class shoupiao { int wuyuangesu=2; int shiyuangesu=0; int ershiyuangesu=0; String s=null; public synchronized String shoupiao(int money) { if(money==5) { wuyuangesu=wuyuangesu+1; s="给你票"+"钱正好"; }else if(money==20) { while(wuyuangesu<3) { try { wait(); }catch(InterruptedException e) { e.printStackTrace(); } } wuyuangesu=wuyuangesu-3; ershiyuangesu=ershiyuangesu+1; s="给你票给我20找你的钱15"; notifyAll(); } return s; } }
- 5楼网友:我的任性你不懂
- 2021-04-22 00:54
http://www.enet.com.cn/eschool/zhuanti/java/
孙鑫的 我刚看完 第五章 有具体的例子