我想了解java中的同步块的概念。 截至我已阅读的文档中,我明白如果我们获取 锁(使用实例变量的同步块),那么我们 无法获取该类中同一对象的同步锁。但 当我尝试使用以下代码片段时,发现我的 理解出错了。JAVA同步对象在不同的方法
即,我可以同时在两个不同的 方法中获取锁 (同一个实例变量上的同步块)。当线程启动时,它将运行 方法并无限期地等待并且不会从同步的 块中跑出。同时,如果我使用相同的 线程调用停止方法,它将进入同步块并执行通知 语句。我在Java文档搜索,但我找不到任何。
这是代码片段:
public class MyClass extends Thread
{
private Object lock = new Object();
public void run()
{
synchronized(lock)
{
lock.wait()
}
//other code
}
public void stop()
{
synchronized(lock)
{
lock.notify()
}
//other code
}
}
这里的代码片段我有多管理MyClass的螺纹:
public class MyClassAdmin
{
MyClass _myclass;
public MyClassAdmin()
{
_myclass=new MyClass();
_myclass.start();
}
public void stop()
{
_myclass.stop();
}
public static void main(String args[])
{
MyClassAdmin _myclassAdmin=new MyClassAdmin();
_myclassAdmin.stop();
}
}
根据我的理解,当线程启动,将收购锁定“锁定”对象(MyClass的run方法中的同步块)。当我调用停止方法时,它应该无限期地等待,直到run方法从synchronized块中出来(在这种情况下永远不会发生)。但是当我执行时,调用stop方法获取锁'对象'并通知导致线程关闭的对象。
你可以请你分享你的代码如何创建线程? – Lathy
这是不是多线程..你的程序是一个单线程与主线程运行后面 – Lathy