JAVA多线程中的synchronized(obj)到底怎么用?
2013-08-18
展开全部
你可以直接用synchronized来修饰一个方法,如:public void synchronized printXX(){
........
}
这样,只在一个线和进个方法,那么此 “类”(方法所在的类) 就会被"上锁",其它线程不能访问。直到这个线程释放资源为止。
还可以将要实现同步的代码写到一个synchronized块里面,如:synchronized(obj){
......
}
注意,此处的obj是一个对象,你可以Object obj = new Object(); 也可以用this来代替,表示当前对象!
........
}
这样,只在一个线和进个方法,那么此 “类”(方法所在的类) 就会被"上锁",其它线程不能访问。直到这个线程释放资源为止。
还可以将要实现同步的代码写到一个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;
}
}
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()方法很清楚,而且例子也有代码,如果你找不到代码,我可以发给你,你多看几遍就能理解了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
线程锁,即操作一个对象时,加入A正在操作,那么B只能等待A操作完后才能进行操作,在单例模式和多线程中用的蛮多.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-08-18
展开全部
http://www.enet.com.cn/eschool/zhuanti/java/ 孙鑫的 我刚看完 第五章 有具体的例子
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询