肯定不行了!比如说
class a
{
public void aaa()
{
synchronized(this)
{
.......
}
}
}在上述的.....执行过程中,对象是不能被其他线程访问的!当然有一点除外,如果.....那里面有wait()语句,那么其他的线程可以进入。
class a
{
public void aaa()
{
synchronized(this)
{
.......
}
}
}在上述的.....执行过程中,对象是不能被其他线程访问的!当然有一点除外,如果.....那里面有wait()语句,那么其他的线程可以进入。
解决方案 »
- 为什么 一个文件里只能有一个public声明的类 public声明的类和没有用public声明的类有声明不同?
- 高手进来解析一下这个applet小程序
- JLabel如何在JPanel上自定义坐标点?
- enctype="multipart/form-data" 问题
- 我运用Runtime类执行bcp命令(unix),程序如下,最后扑获的异常是process hasn't exited,请问是怎么回事??
- 关于applet的运行
- 一个简单的方法问题..
- 求助
- JBuilder中默认的Dialog字体打包后脱离JBuilder无法正常显示,急!!
- 如何得到一个字符的unicode码?
- 各位看看我这样的能力,能找到java程序员吗?
- 一道简单的考试题
但现问题是,可否进入"此对象的其它方法",能还是不能
可以看一下这个例子。
public class syn extends Thread
{
int mode;
boolean exitflag;
public static void main(String arg[])
{
syn syn1 = new syn();
syn1.start();
try
{
sleep(10000);
}catch(Exception e)
{
}
Thread t1 = new Thread(syn1);
syn1.mode = 2;
t1.start();
}
public syn()
{
mode = 1;
exitflag = false;
}
public void run()
{
if(mode == 1)
{
dosyn();
}else if(mode == 2)
{
doexit();
}
}
public synchronized void dosyn()
{
while(!exitflag)
{
System.out.println("in synchronized method");
try
{
sleep(1000);
}catch(Exception e)
{
}
}
}
public void doexit()
{
System.out.println("set exit flag");
exitflag = true;
}
}
哈哈!
能还是不能,为什么,请注意"此对象的其它方法"给你一个标准答案,确切的说应该是如果“其他方法”也是synchronized的(也就是说这个方法也需要调用线程获得锁),那么这个“其他方法”将会等待当前线程访问的synchronized方法结束,他才能被调用如果“其他方法”不是synchronized的(也就是说这个方法不需要调用线程获得锁),那么这个“其他方法”将会直接被另一个线程调用