我想了解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