JAVA多线程中的synchronized(obj)到底怎么用?

 我来答
匿名用户
2013-08-18
展开全部
你可以直接用synchronized来修饰一个方法,如:public void synchronized printXX(){
........
}
这样,只在一个线和进个方法,那么此 “类”(方法所在的类) 就会被"上锁",其它线程不能访问。直到这个线程释放资源为止。
还可以将要实现同步的代码写到一个synchronized块里面,如:synchronized(obj){
......
}
注意,此处的obj是一个对象,你可以Object obj = new Object(); 也可以用this来代替,表示当前对象!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-08-18
展开全部
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;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-08-18
展开全部
一楼说的孙鑫的视屏,很好,我看过9遍了,他上面说synchornized()方法很清楚,而且例子也有代码,如果你找不到代码,我可以发给你,你多看几遍就能理解了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
左丘驰鸿鲁诗
2019-11-03 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:27%
帮助的人:878万
展开全部
线程锁,即操作一个对象时,加入A正在操作,那么B只能等待A操作完后才能进行操作,在单例模式和多线程中用的蛮多.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-08-18
展开全部
http://www.enet.com.cn/eschool/zhuanti/java/ 孙鑫的 我刚看完 第五章 有具体的例子
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式